代码之家  ›  专栏  ›  技术社区  ›  Steve

jQuery不断地ping Ajax响应

  •  4
  • Steve  · 技术社区  · 17 年前

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

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

    5 回复  |  直到 15 年前
        1
  •  25
  •   Andrew Hedges    17 年前

    迭代是人,递归是神圣的。
    -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();
    
        2
  •  1
  •   Graham    17 年前
    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)。

    http://docs.jquery.com/Ajax/jQuery.ajax

        3
  •  1
  •   hrr    14 年前

    //您需要的所有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);
        }
    };
    
        4
  •  0
  •   Ali    17 年前

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

    setInterval('ping()',1000); //this will ping 1000 milliseconds or 1 second
    
        5
  •  0
  •   kkyy    17 年前

    你不必添加一些随机扩展。有一些本机javascript函数 setInterval and setTimeout 在固定的时间间隔做事情。你可能会想做点什么

    function ajaxPing() {
      ...
    }
    
    setInterval("ajaxPing()", 1000);
    
    $(element).mousedown(ajaxPing);
    

    另一方面,如果你真的想做ping mousedown