2012-01-05 3 views
1

У меня есть 3 кнопки на странице. Каждый из них делает запрос AJAX, нажимая на него.Синхронизация AJAX для конкретного случая

Эти запросы должны выполняться в асинхронном режиме. Но нажатие на любую кнопку во второй раз должно: 1. Остановить текущий запрос, который был сделан щелчком по этой кнопке в первый раз.

ИЛИ

  1. Do Nothing.

Вариант № 1 является предпочтительным.

Я знаю об abort(), но мой вопрос - как обнаружить, что запрос Ajax (с определенной кнопки) все еще не закончен? Здесь главное - запрос с определенной кнопки. Я не хочу останавливать все запросы ajax. Я хочу остановить только запрос, который был сделан нажатием одной кнопки в первый раз.

В моем проекте я использую jQuery , это http://api.jquery.com/category/deferred-object/ может мне помочь? если да, вы можете предоставить какой-либо подходящий пример?

Благодаря

ответ

1

Я не верю, что отложенные объекты будут делать то, что вы хотите. Они больше предназначены для выполнения обещаний и совокупных обратных вызовов. Вы можете посмотреть состояние вызова ajax, сохранив ссылку на объект jqXHR, возвращенный $ .ajax.

var ajax; 

function onClick() { 
    if (!ajax || ajax.state() === "resolved") { 
     ajax = $.ajax(url); 
    } 
} 
+0

да, я могу проверить readyState, решить, что делать, вы правы. – user1016265

1

вам нужно иметь переменный, связанные с каждым возможным АЯКСОМ процессом, который отслеживает ли этот процесс в настоящее время работает. Когда запускается вызов ajax, установите эту переменную, чтобы указать, что она работает. Когда этот вызов ajax завершается, установите переменную, чтобы указать, что процесс остановлен. Затем, когда пользователь нажимает кнопку, вы можете проверить переменную, чтобы решить, нужно ли вам прервать() вызов ajax или нет.

+0

как в приведенном выше ответе. Спасибо вам. – user1016265

Смежные вопросы