jQuery不断ping Ajax响应

时间:2009-03-31 04:55:48

标签: php jquery ajax

如何使用jQuery不断运行PHP脚本并每秒获取响应,并将鼠标下载的一小部分数据发送到同一个脚本?

我真的需要添加一些随机扩展才能让这么简单的计时器工作吗?

5 个答案:

答案 0 :(得分:24)

  

迭代是人类,以递归神圣   -L. Peter Deutsch

var req = function () {
    $.ajax({
        url : 'http://example.com/yourscript.php',
        complete : function () {
            req();
        }
    });
};
req();

如果不明显,上述内容将在前一个请求完成后立即生成新请求。您还可以在请求之间设置1秒的延迟,如下所示:

var req = function () {
    $.ajax({
        url : 'http://example.com/yourscript.php',
        complete : function () {
            setTimeout(function () {
                req();
            }, 1000);
        }
    });
};
req();

答案 1 :(得分:1)

function doAjax(data){
    $.ajax({
    type: "POST",
    data: data,
    url: 'http://example.com/yourscript.php',
  });
}
// Set interval
setInterval('doAjax()',1000);
// Set event handler
$(document).mousedown(function(){
  doAjax({key: 'value'});
});

如果您不想捕获整个页面上的点击次数,可以用实际元素替换$(document)。

如果您正在寻找回调等,您可以使用ajax功能做更多事情: http://docs.jquery.com/Ajax/jQuery.ajax

答案 2 :(得分:1)

//您需要的所有ping:

ping.pushCallback(function() { YourCallback(); });
$.data(document.body, 'data_ping', ping);

// --------------------------------------------- --------- //脚本

$.ping = function(url, options) {
    this.url = url;
    this.options = $.extend({
        delay: 2000,
        dataType: 'json',
        timeout: 10000,
        data: {},
        callbacks: []
    }, options);
    this.queue();
};
$.ping.prototype = {
    queue: function() { var self = this;
        setTimeout(function() {
            self.send();
        }, self.options.delay);
    },
    send: function() { var self = this;
        $.ajax(self.url, {
            success: function(data) {
                for (var i in self.options.callbacks) {
                    self.options.callbacks[i](data);
                }
            },
            complete: function() {
                self.queue();
            },
            dataType: self.options.dataType,
            data: self.options.data,
            type: "GET",
            cache: false,
            timeout: self.options.timeout
        });
    },
    setData: function(key, value) { 
        this.options.data[key] = value;
    },
    pushCallback: function(callback) {
        this.options.callbacks.push(callback);
    }
};

答案 3 :(得分:0)

您不必添加一些随机扩展名。有一些本机javascript函数setInterval and setTimeout用于按设定的时间间隔执行操作。您可能想要做类似

的事情
function ajaxPing() {
  ...
}

setInterval("ajaxPing()", 1000);

$(element).mousedown(ajaxPing);

另一方面,如果你真的想要每秒ping ,那么将数据存储在mousedown的变量中并在下次ping时提交它可能就足够了(这将在不到一秒的时间内发生)。

答案 4 :(得分:0)

您可以将用于ping服务器的代码放在函数中,然后执行以下操作:

setInterval('ping()',1000); //this will ping 1000 milliseconds or 1 second