Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 自动更新聊天室_Php_Javascript - Fatal编程技术网

Php 自动更新聊天室

Php 自动更新聊天室,php,javascript,Php,Javascript,所以我正在开发一个javascript/php聊天盒。除了更新我的div的内容之外,其他一切都可以正常工作(这只工作一次,但之后当新消息被放入数据库时,它不会继续更新它)。这是我的密码: Javascript部分: <script language=javascript type='text/javascript'> setInterval(function () { var arrayOfObjects = <?print_

所以我正在开发一个javascript/php聊天盒。除了更新我的div的内容之外,其他一切都可以正常工作(这只工作一次,但之后当新消息被放入数据库时,它不会继续更新它)。这是我的密码:

Javascript部分:

   <script language=javascript type='text/javascript'> 

        setInterval(function () {

            var arrayOfObjects = <?print_r(getChatArray());?>;
            var chat = "";

            for (var i = 0; i < arrayOfObjects.length; i++) {
                var object = arrayOfObjects[i];

                chat += "["+object.date+"]"+object.op+": " + object.msg + "</br>";
            }
            $('#chat').html(chat);

        }, 10);
    </script>

setInterval(函数(){
var arrayOfObjects=;
var chat=“”;
对于(变量i=0;i”;
}
$('#chat').html(chat);
}, 10);
Php部分:

<?php
function getChatArray() {
    $result = mysql_query("SELECT * FROM shouts ORDER BY id DESC"); 
    $to_encode = array();

    $count = mysql_num_rows($result);
    $size = 0;
        if($count > 0) {
            while($row = mysql_fetch_assoc($result)) {
              $to_encode[$size]['id'] = $row['id'];
              $to_encode[$size]['msg'] = $row['msg'];
              $to_encode[$size]['op'] = $row['op'];
              $to_encode[$size]['date'] = $row['date'];
              $size += 1;
            } 

        } else {
            return "None";
        }

return json_encode($to_encode);
}
?>

有没有关于为什么不不断更新的想法


谢谢。

因为JS每10毫秒解析一次原始聊天室内容,所以您不会获取任何新内容。您需要实现一个ajax调用,我强烈建议将该setInterval更改为递归setTimeout,更实际的延迟为500ms,这样您就不会杀死客户端

与此相反:

setInterval(function() {

    var arrayOfObjects = <?print_r(getChatArray());?>;
    ...
setInterval(函数(){
var arrayOfObjects=;
...
您可以使用如下内容:

(function updateChat(){

    var arrayOfObjects, 
        chat, 
        max,
        _object,
        i = 0;

    $.ajax({
        url : '/getChatArray.php', // php echoes the json
        success: function(arrayOfObjects){
            for (max = arrayOfObjects.length; i < max; i++) {
                _object = arrayOfObjects[i];
                chat += "["+_object.date+"]"+_object.op+": " + _object.msg + "</br>";
            }
            $('#chat').html(chat);
            setTimeout(updateChat, 500);
        }
    });
}());
(函数updateChat(){
var arrayOfObjects,
聊天,
最大值,
_反对,,
i=0;
$.ajax({
url:'/getchatary.php',//php回显json
成功:函数(arrayOfObjects){
对于(max=arrayOfObjects.length;i”;
}
$('#chat').html(chat);
setTimeout(updateChat,500);
}
});
}());

显然,您需要根据需要填充ajax处理程序,添加更多的参数,如数据类型等,以及一些错误处理。

因为JS每10毫秒解析一次原始聊天室内容,您就不会获取任何新内容。您需要实现一个ajax调用,我强烈建议更改设置间隔to递归设置超时,更实际的延迟为500毫秒,这样就不会杀死客户端

与此相反:

setInterval(function() {

    var arrayOfObjects = <?print_r(getChatArray());?>;
    ...
setInterval(函数(){
var arrayOfObjects=;
...
您可以使用如下内容:

(function updateChat(){

    var arrayOfObjects, 
        chat, 
        max,
        _object,
        i = 0;

    $.ajax({
        url : '/getChatArray.php', // php echoes the json
        success: function(arrayOfObjects){
            for (max = arrayOfObjects.length; i < max; i++) {
                _object = arrayOfObjects[i];
                chat += "["+_object.date+"]"+_object.op+": " + _object.msg + "</br>";
            }
            $('#chat').html(chat);
            setTimeout(updateChat, 500);
        }
    });
}());
(函数updateChat(){
var arrayOfObjects,
聊天,
最大值,
_反对,,
i=0;
$.ajax({
url:'/getchatary.php',//php回显json
成功:函数(arrayOfObjects){
对于(max=arrayOfObjects.length;i”;
}
$('#chat').html(chat);
setTimeout(updateChat,500);
}
});
}());

显然,您需要根据需要填充ajax处理程序,添加更多的参数,如数据类型等,以及一些错误处理。

您的数据库内容只会在初始导航到页面时输出到页面。 此代码:

var arrayOfObjects = <?print_r(getChatArray());?>;
var arrayOfObjects=;
当PHP呈现页面时,将只输出getChatArray()返回的内容。因此,脚本在呈现时只能看到函数返回的一种状态

您需要使用从数据库异步检索内容

我建议你:

  • 创建一个PHP脚本,该脚本以以下格式输出数据
  • 特别是使用函数来检索该脚本的输出
  • 用这些数据做你想做的事情

  • 您的数据库内容将仅在初始导航到该页面时输出到该页面。 此代码:

    var arrayOfObjects = <?print_r(getChatArray());?>;
    
    var arrayOfObjects=;
    
    当PHP呈现页面时,将只输出getChatArray()返回的内容。因此,脚本在呈现时只能看到函数返回的一种状态

    您需要使用从数据库异步检索内容

    我建议你:

  • 创建一个PHP脚本,该脚本以以下格式输出数据
  • 特别是使用函数来检索该脚本的输出
  • 用这些数据做你想做的事情

  • 顺便说一句,你的代码中也有不少不好的做法。我想你错过了客户端和服务器端的区别。我才刚开始学习js,所以我不希望我的代码马上就有好的做法。如果你绝对需要那里的
    SELECT
    语句,我会把它改为
    SELECT id,msg,op、 date FROM shouts ORDER BY DESC
    这样你只会得到你需要的字段,而不是一个大的结果集,甚至
    设置事务隔离级别READ UNCOMMITTED;选择id,msg,op,date FROM shouts ORDER BY DESC;COMMIT;
    ,这会让它更快一些。不过,我同意你的看法@BenM@MilkyWayJoe这有关系吗,我用的都是我数据库中的字段。顺便说一句,你的代码中也有不少不好的做法。我想你错过了客户端和服务器端之间的区别。我才刚开始学习js,所以我不希望我的代码马上就有好的做法。如果你绝对需要在那里有
    SELECT
    语句,我会更改它要
    选择id,msg,op,datefrom shouts ORDER BY DESC
    ,您只需要一个不太大的结果集,甚至
    设置事务隔离级别READ UNCOMMITTED;选择id,msg,op,date FROM shouts ORDER BY DESC;COMMIT;
    ,这会让它更快一些。不过,我同意@BenM@MilkyWayJoe是吗尽管如此,我正在使用数据库中的所有字段。对不起,你能给我你的意思和示例吗?对不起,你能给我你的意思和示例吗?