Разорвать петлю снаружи петли - PullRequest
0 голосов
/ 10 августа 2010

У меня есть форма поиска со значениями по умолчанию.Когда пользователь загружает страницу, при загрузке я вызываю функцию.

Эта функция имеет цикл, который вызывает Ajax-запрос с каждой итерацией.

Мне потребуется от 20 до 30 секунд.Запрос Ajax выполняется.

Во время этих итераций пользователь может изменять значения формы и может отправить форму до завершения этих итераций.

Есть ли способ разорвать этот цикл, когда пользователь нажимаетКнопка отправки?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 10 августа 2010

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

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

var submitted = false;
var timer = null;
$('.submit-button').click( function() {
    submitted = true;
    if (timer) clearTimeout( timer );
    $('form').submit();
    return false;
});

function doUpdate()
{
     if (!submitted) {
         $.ajax({
            ...
         });
         timer = setTimeout(doUpdate,1000);
     }
}

doUpdate();
1 голос
/ 10 августа 2010

Когда вы отправите форму, автоматически будет выполнено другое выполнение на стороне клиента.

Если вы отправляете с использованием Ajax, вы можете оставить флаг (глобальную переменную), чтобы остановить цикл.

1 голос
/ 10 августа 2010

В некотором роде, перед каждым вызовом ajax, он проверяет наличие флага. Скажем, например, это может быть инициализировано при загрузке страницы как CARRY_ON = true;

Теперь, когда нажата кнопка отправки, измените флаг на false. Тогда все последующие запрошенные ajax будут остановлены.

...