2012-04-18 15 views
0

私は最後の2日間、これを運がうまく動作するようにしようとしています。 1回実行されますが、最初のロード後に更新を続行できません。この機能は自動的に更新されず、30秒後に再起動もされません。コードは私にとっては問題ないようですが、明らかに、これが機能しない原因となっているロングポーリングに関する知識のギャップがあります。もし誰かが瞬間を持っていれば、私はあなたがこれを櫛を切って、それが何であるか私に教えてくれればそれを感謝します。私は間違っています。どんな助けもありがとう、ありがとう。AJAXロングポーリングで接続が開いていない

のJavaScript/jQueryの

function poll(pid){ 
    var dataString = 'pid=' + pid; 
    $.ajax({type: 'GET', url: 'http://localhost:8888/mysite/execs/vote_count.php', data: dataString, async: true, cache: false, success: function(data){ 

var post = $('#' +pid); 
    var post_children = post.children(); 
    var upvotes = post_children.find('.upvotes'); 
    var downvotes = post_children.find('.downvotes'); 

downvotes.text("-" + data.downvotes); 
upvotes.text("+" + data.upvotes); 

    }, dataType: "json", complete: poll, timeout: 30000 }); 
}; 

$(".post").each(function(){ 
poll($(this).attr("id")); 
}); 

PHP(vote_count.php)

<?php 
$hostname = 'localhost'; 
$username = 'root'; 
$password = 'root'; 
$database = 'database'; 
try { 
    $dbh = new PDO("mysql:host=$hostname;dbname=$database", $username, $password); 
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $stmt = $dbh->prepare("SELECT * FROM vote WHERE post = :pid AND rating = 'votedown'"); 
    $pid = $_GET['pid']; 
    $stmt->bindParam(':pid', $pid, PDO::PARAM_STR); 
    $stmt->execute(); 
    $result = $stmt->fetchAll(); 
    } 
catch(PDOException $e) 
    { 
    echo $e->getMessage(); 
    } 
    $stmt->execute(); 
    $downvotes = $stmt->rowCount(); 


    try { 
    $dbh = new PDO("mysql:host=$hostname;dbname=$database", $username, $password); 
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $stmt = $dbh->prepare("SELECT * FROM vote WHERE post = :pid AND rating = 'voteup'"); 
    $pid = $_GET['pid']; 
    $stmt->bindParam(':pid', $pid, PDO::PARAM_STR); 
    $stmt->execute(); 
    $result = $stmt->fetchAll(); 
    } 
catch(PDOException $e) 
    { 
    echo $e->getMessage(); 
    } 
    $stmt->execute(); 
    $upvotes = $stmt->rowCount(); 
$arr = array("downvotes"=>$downvotes,"upvotes"=>$upvotes); 
echo json_encode($arr); 
$dbh = null; 
?> 

答えて

0

私はあなたが持っていると思うの主要な問題は、あなたが完了することを想定している:世論調査が使用する渡されました現在の呼び出しからパラメータpidを返します。これを試して。

function poll(pid){ 
    var dataString = 'pid=' + pid; 
    $.ajax({type: 'GET', 
     url: 'http://localhost:8888/mysite/execs/vote_count.php', 
     data: dataString, 
     async: true, 
     cache: false, 
     success: function(data){ 
      var post = $('#' +pid); 
      var post_children = post.children(); 
      var upvotes = post_children.find('.upvotes'); 
      var downvotes = post_children.find('.downvotes'); 

      downvotes.text("-" + data.downvotes); 
      upvotes.text("+" + data.upvotes); 
     }, 
     dataType: "json", 
     complete: function(xhr, status){ 
      setTimeout(function(){poll(pid);}, 30000); 
     }, 
     timeout: 30000 
    }); 
} 

$(".post").each(function(){ 
    poll($(this).attr("id")); 
}); 

一度あなたがのために更新をチェックしている多くの記事を持っている場合、あなたがアップし、これらの呼び出しをバンドルし、ページごとに30秒ごとに1回の呼び出しを検討(ポスト更新の配列を返す)可能性がある、と述べた代わりのものすべて30秒ごとに1ページあたりの投稿ごとに(私の余分な2セント。)

編集:上記のタイムアウトが追加されました。初めてそれを離れた。

+0

そうです、それは私の大きな問題です。私はそれについて考えなかったことに驚いています。しかし、この問題にもかかわらず、私の理解は、この接続が開いたままで(一見)自動アップデートを作成することになっているということです。さもなければ、私はsetIntervalを使うことができます。しかし、最初の30秒でさえ、何も変わりません。 – Ian

+0

私のPHPはちょっとした週ですが、接続を開いたままにするためにjavascriptに何も表示されません。すべてのタイムアウトは、AJAX呼び出しがそれ自体で時間切れになるとオーバーライドされ、jQueryはポスト関数ごとに1回だけポーリング関数を呼び出します。 – devstruck

+0

ここに長いプーリングのためのより良い、きれいなパターンhttp://blog.falafel.com/Blogs/basem-emara/2012/06/06/polling-ajax-requests-in-javascript – ozhan

0

私は一度レスポンスを受け取ると思います。ブラウザは接続を開いていないはずです。また、ブラウザのurとheaderの送信に多く依存します。 ..ヘッダーshudにはConnection:Keep-aliveがあり、接続を開いたままにします。
。 私は様々なテストを行っています。
1. IEは既存の接続を開いたままにしませんが、2つの接続を同時に開き、2番目の接続を開いたままにして最初の接続を閉じます。
2.Chromeは2つのリクエスト(favicon用)をうまく送信しますが、接続は開いたままにします。
3. Mozillaは1つの要求のみを送信し、開いたままにします。
IE9を使ってこれをテストしていますか?

+0

私はクロムにいるWindowsのデュアルブートではないMac上で、友人のcompにファイルを転送しない限り、私が望んでいてもIE9でテストすることはできません。 – Ian

+0

私の悪い.. :(私は、応答ヘッダーurがサーバーから戻ってくるのを確認できます。 –

関連する問題