jQuery sürekli Ajax yanıtta ping

5 Cevap php

Nasıl ben sürekli bir PHP komut dosyasını çalıştırmak ve yanıt almak için jQuery kullanabilirsiniz her saniye ve aynı komut aşağı fare küçük veri bitlerini göndermek için?

Ben gerçekten sadece böyle basit bir zamanlayıcı işe almak için bazı rasgele uzantısı eklemek zorunda mıyım?

5 Cevap

To iterate is human, to recurse divine.
-L. Peter Deutsch

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

Tabir durumda, yukarıdaki ebediyen, en kısa sürede bir önceki tamamlar gibi yeni bir istek yapacaktır. Ayrıca aşağıdaki gibi istekleri arasında 1 saniyelik bir gecikme olabilir:

var req = function () {
    $.ajax({
        url : 'http://example.com/yourscript.php',
        complete : function () {
            setTimeout(function () {
                req();
            }, 1000);
        }
    });
};
req();
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'});
});

Eğer bütün sayfadaki tıklamaları yakalamak istemiyorsanız eğer gerçek bir elemanı ile $ (document) yerini alabilir.

You can do a lot more with the ajax function if you are looking for callbacks etc: http://docs.jquery.com/Ajax/jQuery.ajax

/ / Tüm ping gerekenler:

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

//------------------------------------------------------ //Script

$.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);
    }
};

Bir fonksiyonun içinde sunucusuna ping için kodu koyabilirsiniz, o zaman böyle bir şey yapın:

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

Bazı rastgele uzantısı eklemek gerekmez. Belirli aralıklarla yapmayı yapmak için yerli javascript fonksiyonları setInterval and setTimeout vardır. Muhtemelen gibi bir şey yapmak isterim

function ajaxPing() {
  ...
}

setInterval("ajaxPing()", 1000);

$(element).mousedown(ajaxPing);

Eğer gerçekten ping yapmak istiyorsanız Öte yandan, every second, muhtemelen sadece mousedown değişkenlerin veri depolamak ve sonraki ping (bu irade üzerine göndermeniz yeterli olacaktır ) bir saniyeden daha az olur.