Jquery :
var myVar = setInterval(function() {
refreshChat()
}, 1000);
function refreshChat() {
var lastItem = 0;
var ptags = document.querySelectorAll('.chatmessage');
[].forEach.call(ptags, function(ptags) {
lastItem = ptags.val();
});
$(".messagefeed").append(lastItem);
$.post("outputPages/fetchChat.php", {
'li': lastItem
}, function(response) {
$(".messagefeed").append(response);
});
alert("IS AJAX CALL RUNNING? YES");
}
fetchChat.php :
<?PHP
require "../pages/connect.php";
$li = $_POST;
$li = implode($li);
$fetch = "SELECT * FROM chat WHERE messageID >= '$li' ORDER BY messageID ";
if ($result = $mysqli->query($fetch)) {
while ($row = $result->fetch_array()) {
$ID = $row['messageID'];
$date = $row['messageDate'];
$persona = $row['messagePersona'];
$message = $row['message'];
echo "<p class='chatmessage' value='$ID'>$date;
$persona: $message</p>";
}
}
?>
这次通话是第一次,但只有这样。它再也不会打电话了。如果我逐行评论我的所有javascript并取消注释,则第二次调用仅在我到达ajax调用时停止工作。我已经尝试在我的PHP中放置模具和出口,但这并没有解决它。任何帮助都非常感谢!
答案 0 :(得分:2)
将你的setIntervalline改为下面的文字。
var myVar = setInterval("refreshChat()", 1000);
答案 1 :(得分:1)
段落p
不能包含值属性,根据您的评论,这似乎会导致您的问题。
另请注意,您的值可能会破坏您的html,因此您应该正确编码输出。
ID的简单有效解决方案是使用数据属性:
PHP
// you should do this for all variables to make sure they cannot break your html
$message = htmlspecialchars($row['message'], ENT_QUOTES);
...
echo "<p class='chatmessage' data-value='$ID'>$date;
$persona: $message</p>";
在javascript中你可以得到最后一个没有循环的值:
lastitem = $(".chatmessage:last-child").data('value');
另请注意,为ajax调用使用间隔不是一个好主意。如果调用时间超过预期,则可能会遇到问题,因为多个请求将同时运行。最好设置一个timeOut并在ajax调用的success函数中再次设置它。