我一直在試圖在過去兩天得到這個工作沒有運氣。它執行一次,但在初始加載後無法繼續更新。該功能不會自動更新,也不會在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;
?>
你說得對,那是我的主要問題。我很驚訝,我沒有想到這一點。然而,儘管這個問題,我的理解是,這種連接應該保持開放並創建(看似)自動更新。否則,我可以使用setInterval。但即使在最初的30秒內,也沒有任何變化。 – Ian 2012-04-18 21:32:00
我的PHP有一個星期,但我沒有看到在您的JavaScript保持連接打開。當AJAX調用本身超時時,所有超時都會覆蓋,jQuery每次只爲每個帖子調用一次輪詢函數。 – devstruck 2012-04-18 21:37:51
這裏是一個更好和乾淨的模式,以長池http://blog.falafel.com/Blogs/basem-emara/2012/06/06/polling-ajax-requests-in-javascript – ozhan 2013-03-26 17:52:46