Подтвердить что ты не робот

Jquery:: ajaxStop() против jquery:: ajaxComplete()

который должен использоваться в это время.

В документации по http://api.jquery.com/:

Для ajaxStop() он говорит:

Описание: зарегистрируйте обработчик, который будет вызываться, когда все запросы Ajax завершены. Это событие Ajax.

И для ajaxComplete() он говорит:

Описание: зарегистрируйте обработчик, который будет вызываться, когда запросы Ajax завершены. Это событие Ajax.

Из того, что я вижу, ajaxComplete() более гибкий из-за:

Все обработчики ajaxComplete вызываются независимо от того, какой запрос Ajax был завершен. Если мы хотим различать запросы, мы можем использовать параметры, переданные обработчику. Каждый раз, когда выполняется обработчик ajaxComplete, ему передается объект события, объект XMLHttpRequest и объект настроек, который использовался при создании запроса.

Может кто-то объяснить, для чего каждый из них подходит, и соответствующее использование для каждого. В приложении, которое я недавно создал, я полагался на ajaxStop() для запуска, когда мои вызовы ajax были закончены. Затем я проанализировал возвращаемые данные для результата операции на стороне сервера. Теперь я начинаю задаваться вопросом, следует ли мне вместо этого использовать ajaxComplete() или комбинацию обоих для разных ситуаций.

Мысли приветствуются.

4b9b3361

Ответ 1

Ну, короткая версия - это разные задачи, поэтому ответ будет "комбинацией обоих вариантов для разных ситуаций". Основные правила:

  • .ajaxComplete() - выполняется для каждого запроса, который завершается, используйте это, когда вы хотите что-то делать с каждым запрос/результат. Обратите внимание, что это не заменяет обработчик success, поскольку проанализированные данные не являются одним из аргументов (и он работает даже при наличии ошибки) - вы можете захотеть .ajaxSuccess() в некоторых ситуациях с запросом.
  • .ajaxStop() - выполняется, когда завершается каждая партия запросов, как правило, вы должны использовать это в сочетании с .ajaxStart() для таких вещей, как показ/скрытие индикатора "Загрузка..." какого-либо типа - или сделать что-то еще после партии AJAX запросы заканчиваются, как последний шаг мастера.

Если вы используете это для анализа ваших данных, возможно, лучший способ, в данном случае $.ajaxSetup(), где вы можете указать a success, который получает уже проанализированные данные (например, ответы JSON будут объектами), например:

$.ajaxSetup({
  success: function(data) { 
    //do something with data, for JSON it already an object, etc.
  }
});

Ответ 2

ajaxComplete вызывается всякий раз, когда запрос ajax заканчивается либо успешно, либо с ошибкой.

ajaxStop вызывается, когда все запросы ajax завершаются. Таким образом, в отличие от ajaxComplete, он не будет вызываться, если все еще выполняется запрос.

Вы должны использовать первое, если операция, которую вы хотите выполнить, должна выполняться для каждого запроса ajax.

Ответ 3

В общем, вы хотите использовать ajaxComplete. Это связано с тем, что ajaxStop запускается только тогда, когда больше нет запросов ajax, ожидающих возвращения. Это может выглядеть не так, как только вы отправляете один запрос ajax за раз, но представьте, что в сети произошло замедление после отправки запроса A, и, когда запрос B отправлен через 5 секунд, он возвращается раньше, чем запрос A.., тогда ajaxStop будет запускаться только один раз после запроса A, когда ajaxComplete будет срабатывать оба раза.

Ситуация, в которой вы бы использовали ajaxStop, - это когда вы отправляете несколько запросов ajax за один раз... например. чтобы представить серию из трех форм... и хотите, чтобы вас уведомили, когда все 3 успешно завершены. Конечно, вы можете достичь той же функциональности с помощью счетчика в ajaxComplete

Однако из звуков вашего вопроса... вы хотите проанализировать данные из каждого ответа ajax... как правило, это было бы сделано в обратном вызове ajax, например.

$.ajax({
   url: "blah",
   data: "blah",
   success: function (data) { /* Code in here */ }
});