私は過去2日間、これをうまく機能させようとしてきました。1 回実行されますが、初期ロード後に更新を続行できません。この機能は自動的に更新されず、30 秒後に再起動されません。コードは私には問題ないように見えますが、明らかに、これが機能しない原因となっているロングポーリングに関する知識のギャップがあります。誰かが少し時間があれば、これをくまなく調べて、私が間違っていることを教えていただければ幸いです. どんな助けでも大歓迎です、ありがとう。
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;
?>