替代在AJAX中使用setTimeout?

时间:2011-02-09 10:36:28

标签: php javascript jquery mysql ajax

嘿伙计们,有更有效的方法吗?

setInterval('getAllWords()', 2000);

function getAllWords() {
    $.ajax({
        type: "GET",
        url: "queries.php",
        data: "action=all",
        success: function(data){
            dataArray = data.split('|');
            $('#words').html('');
            for (var i = 0; i < dataArray.length; i++) {
                if ((dataArray[i]).length > 1) {
                    $('ul').append('<li>' + dataArray[i] + '</li>');
                }
            }
        }
    });
}

ELABORATION(?)
这基本上每隔2秒连接一次数据库并检查更新后的单词,是否有一种简单的方法来实现push请求或什么来最小化数据库活动?

更多信息:
我的托管不支持安装AJAX推送服务器,他们不会为我安装


:(

6 个答案:

答案 0 :(得分:1)

听起来你想要server push

答案 1 :(得分:1)

如果你无法安装推送服务器,请考虑这个黑客:

运行一个无限循环,只有在有新内容时才会发送你的ajax请求的答案(while(true){检查更新的单词})。

在您的ajax代码中,您可以简单地启动一个请求,并在完成后立即启动一个请求(例如,readyState == 4 - &gt;启动新请求)

答案 2 :(得分:0)

如果您不需要Internet Explorer支持,可以使用webSockets

否则有几种标准方法可以实现server push

以下是实施long polling using php的方法 - 使用谷歌查找更多信息:)

答案 3 :(得分:0)

如果在您的数据库服务器上启用了查询缓存,那么这不应该让您担心。在单词字段更新之前,查询cacher将不会加载数据库。

另一方面,

我更喜欢使用setTimeout而不是使用setInterval。如果来自服务器的响应需要超过2秒才能返回怎么办? 即使先前的请求未完成,setInterval也会再次发出请求。

所以, 我会用这个

function getAllWords() {

    $.ajax({
        type: "GET",
        url: "queries.php",
        data: "action=all",
        success: function(data){
            dataArray = data.split('|');
            $('#words').html('');
            for (var i = 0; i < dataArray.length; i++) {
                if ((dataArray[i]).length > 1) {
                    $('ul').append('<li>' + dataArray[i] + '</li>');
                }
            }

            setTimeout(getAllWords,2000);
        }
    });
}

getAllWords();

答案 4 :(得分:0)

缩小db活动,你可以:

  • 使用记录来保存关键字中的内容是否发生了变化,而不是直接在关键字的表格中进行检查。

OR

  • 使用应用程序范围变量:PHP本身不存在。但是,如果您的服务器上安装了APC,则可以使用APC变量。

答案 5 :(得分:-1)

您可以使用setInterval()功能,但方法的效率取决于您的要求。

请告诉我你的要求。