Точный пример длинного опроса? - PullRequest
6 голосов
/ 05 мая 2011

Я сделал функцию, которая должна выполнять длинный опрос и извлекать живые данные, которые «передаются» мне. Сейчас я тестирую объект json, отформатированный так, как он будет выглядеть после получения данных. Кажется, пока он работает точно. Мне просто интересно, что вы думаете об этом? Вы бы как-то рефакторинг или совсем по-другому?

var url = '../../path_to_script/respondents.json';

function fetchData() {
  $.ajax({
    url: url,
    method: 'GET',
    dataType: 'json',
    contentType: "application/json; charset=utf-8",
    cache: false,
    success: function (data) {
        //parseData(data);
        setTimeout(function () { fetchData() }, 5000);
        console.log(data);
    },
    error: function (data) {
        setTimeout(function () { fetchData() }, 5000)
    }

 });

}

Привет

Ответы [ 3 ]

3 голосов
/ 05 мая 2011

Это работает как ожидалось.Поскольку вы мудро решили запустить setTimeout после возврата запроса, не может быть «перекрывающихся» запросов.Это хорошо.

В любом случае, вы можете использовать jQuerys "новые" отложенные объекты ajax, что, вероятно, немного более удобно.

(function _poll() {
    $.getJSON( url ).always(function( data ) {
        console.log( data );
        _poll();
    });
}());

Примечание :.always() является новым (jQuery 1.6).

Редактировать

Пример: http://jsfiddle.net/rjgwW/6/

2 голосов
/ 25 января 2013

Я предлагаю изменить события на:

success: function (data) {
    console.log(data);
},
complete: function () {
    setTimeout(function () { fetchData() }, 5000)
}

Полное событие всегда вызывается после успеха и ошибки.Таким образом, у вас будет только одна строка setTimeout, что лучше.

1 голос
/ 05 мая 2011

Я бы сделал некоторые изменения

  • Изменить method на type, method не является допустимым параметром для $.ajax. Это ошибка
  • Удалить contentType, с dataType: 'json' достаточно, чтобы эти значения были
  • Сделайте что-нибудь, если возникнет ошибка. Используйте параметры ошибок, если они вам нужны. Например:

.

error: function (xhr, status, errorThrown) {
  alert("There was an error processing your request.\nPlease try again.\nStatus: " + status);
}

Надеюсь, это поможет. Приветствия

...