JQuery постоянно пинг для ответа Ajax - PullRequest
4 голосов
/ 31 марта 2009

Как я могу использовать jQuery для постоянного запуска PHP-скрипта и получения ответа каждую секунду, а также для отправки небольших кусочков данных с помощью мыши на один и тот же скрипт?

Действительно ли мне нужно добавить какое-нибудь случайное расширение, чтобы заставить работать такой простой таймер?

Ответы [ 5 ]

24 голосов
/ 31 марта 2009

Итерировать по-человечески, повторять божественное.
-L. Питер Дойч

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 голос
/ 12 февраля 2012

// Все нужные вам пинги

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);
    }
};
1 голос
/ 31 марта 2009
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

0 голосов
/ 31 марта 2009

Вы можете поместить код для проверки связи с сервером в функцию, а затем сделать что-то вроде этого:

setInterval('ping()',1000); //this will ping 1000 milliseconds or 1 second
0 голосов
/ 31 марта 2009

Вам не нужно добавлять какое-либо случайное расширение. Существуют встроенные функции javascript setInterval и setTimeout для выполнения операций с заданными интервалами. Возможно, вы захотите сделать что-то вроде

function ajaxPing() {
  ...
}

setInterval("ajaxPing()", 1000);

$(element).mousedown(ajaxPing);

С другой стороны, если вы действительно хотите выполнять пинг каждую секунду , вероятно, будет достаточно просто сохранить ваши данные в переменных на mousedown и отправить их на следующий пинг (это случиться менее чем за секунду).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...