setInterval第二次没有在ajax调用上工作

时间:2015-06-17 07:30:37

标签: javascript php ajax

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中放置模具和出口,但这并没有解决它。任何帮助都非常感谢!

2 个答案:

答案 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函数中再次设置它。