1

我有一个聊天,每 0.1 秒自动刷新一次,但有时它需要永远刷新甚至加载。

代码:

我在 html 文档的 htdocs 之前有我的 Body OnLoad 脚本。

<body onload="chat_load()">

这是我的java脚本。

<script type="text/javascript" src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
<script type='text/javascript'>
var updateTime = 1;
var running = false;

var counter = 0;

function chat_update(){
    if(counter = updateTime)
        chat_load();
    else
        counter ++;

    if (running == true)
        setTimeout("chat_update", 100);
}

function chat_load(){
    $.post('chat_submit.php', {stage:"load"}, function(data){
        $('#chatbox #primary #window').html( data );
        counter = 0;
        setTimeout("chat_load();", 100*updateTime);

    });
}

function chat_send(){
    var text = document.getElementById("chat_text").value;

        document.getElementById("chat_text").value = '';
    $.post('chat_submit.php', {stage:"send", text:text}, function(data){

        if(data == "good")
            chat_load();
        else
            alert("Please enter a message.");


    });

}
</script>

聊天提交.php

if($stage == "load"){

$query = mysql_query("SELECT * FROM chat_chats ORDER BY time DESC");
if(mysql_num_rows($query) >0){
    while($row = mysql_fetch_assoc($query)){

        $user1 = $row['user'];
        $date = $row['time'];
        $content = $row['text'];

        if($user == $user1){
            $num = 2;
        }else{
            $num = 1;
        }


        echo '<div class="list'.$num.'">';
            echo '<b>'.$user1.'</b> <font color="red"><i>'.$date.'</i></font> <br> '.$content;
        echo "</div>";



    }
}
else
    echo "No messages found be the first.";

}

**

我遇到的问题是,有时它不会在第一页加载时刷新甚至加载。有谁知道为什么?我仍然希望它能够快速自动刷新,但现在它似乎滞后并且失败了很多。代码中是否有任何错误或者我可以使用更好的功能?

**

谢谢。

4

2 回答 2

1

您应该将 Javascript 代码包装在

$(function() {
   // code here
});

这是$(document).ready()的 jQuery 简写。我会在 Javascript 的末尾删除<body onload="chat_load()">and 调用。chat_load()

于 2013-11-06T22:29:04.890 回答
1

起初 0.1 s 的 ajax 拉刷新间隔肯定太小了。

我会把它增加到几秒钟。

并添加一些最后一条消息的标记,这样您就可以只提取最新的按摩并将它们附加到您的聊天消息中,这样您就不必在每次请求时发送所有消息,只发送上次拉取的新消息。这应该会降低 mysql 负载并加快数据发送速度。

于 2013-11-06T22:30:05.760 回答