опрос Ajax jQuery для ответа JSON, обрабатывающего на основе Ajax, заканчивается или содержание JSON

Вы не захотите отправлять HTTP-заголовки за 100 аккуратностью. Вы ни один не хочет генерировать больше запросы, чем необходимый.

Отправляют целый заказ в одном объекте JSON к серверу, к: сервер/порядок или сервер/порядок/новый. Возвратите что-то, что указывает на: server/order/order_id

Также рассматривает использование <ударяют>, СОЗДАЮТ ПОМЕЩЕННЫЙ вместо POST

46
задан Bungle 10 September 2009 в 17:23
поделиться

3 ответа

Вы можете использовать простой тайм-аут для рекурсивного вызова ajax_request.

success: function(xhr_data) {
  console.log(xhr_data);
  if (xhr_data.status == 'pending') {
    setTimeout(function() { ajax_request(); }, 15000); // wait 15 seconds than call ajax request again
  } else {
    success(xhr_data);
  }
}

Проведите проверку счетчика вокруг этой строки, и вы получите максимальное количество опросов.

if (xhr_data.status == 'pending') {
  if (cnt < 6) {
    cnt++;
    setTimeout(function() { ajax_request(); }, 15000); // wait 15 seconds than call ajax request again
  }
}

Вам не нужно делать что-либо в вашей функции ошибок, если вы не хотите подавать предупреждение или что-то в этом роде. тот простой факт, что это ошибка, предотвратит вызов функции успеха и, возможно, запуск другого опроса.

47
ответ дан 26 November 2019 в 20:39
поделиться

Вне моей головы:

$(function ()
{
    // reference cache to speed up the process of querying for the status element
    var statusElement = $("#status");

    // this function will run each 1000 ms until stopped with clearInterval()
    var i = setInterval(function ()
    {
        $.ajax(
        {
            success: function (json)
            {
                // progress from 1-100
                statusElement.text(json.progress + "%");

                // when the worker process is done (reached 100%), stop execution
                if (json.progress == 100) i.clearInterval();
            },

            error: function ()
            {
                // on error, stop execution
                i.clearInterval();
            }
        });
    }, 1000);
});
3
ответ дан 26 November 2019 в 20:39
поделиться

большое спасибо за функцию. Она немного глючная, но вот исправление. Ответ roosteronacid не останавливается после достижения 100%, потому что неправильно используется функция clearInterval.

Вот рабочая функция:

$(function ()
{
    var statusElement = $("#status");

    // this function will run each 1000 ms until stopped with clearInterval()
    var i = setInterval(function ()
    {
        $.ajax(
        {
            success: function (json)
            {
                // progress from 1-100
                statusElement.text(json.progress + "%");

                // when the worker process is done (reached 100%), stop execution
                if (json.progress == 100) clearInterval(i);
            },

            error: function ()
            {
                // on error, stop execution
                clearInterval(i);
            }
        });
    }, 1000);
});

Функция clearInterval() принимает в качестве параметра id интервала, и тогда все в порядке ;-)

Будьте здоровы! Nik

4
ответ дан 26 November 2019 в 20:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: