Основной ответ - просто тот, который дан здесь : Вы не можете abort()
вызвать JSONP.Таким образом, реальный вопрос в том, как избежать лишних вызовов обратного вызова и ошибки, которую вы видите?
Вы не можете использовать try...catch
для обратного вызова, потому что это асинхронный;вам придется ловить его с конца jQuery, а jQuery обычно не обрабатывает исключения, вызванные обратными вызовами.(Я обсуждаю это в моей книге, Async JavaScript .) Вместо этого вы хотите использовать уникальный идентификатор для каждого вызова Ajax и, когда вызывается успешный обратный вызов, проверить,этот идентификатор такой же, как и при совершении вызова.Вот простая реализация:
var requestCount = 0;
$.ajax(url, {
dataType: 'jsonp',
requestCount: ++requestCount,
success: function(response, code) {
if (requestCount !== this.requestCount) return;
// if we're still here, this is the latest request...
}
});
Здесь я использую тот факт, что все, что вы передаете $.ajax
, присоединяется к объекту, который используется в качестве this
в обратном вызове.
Было бы хорошо, если бы jQuery заставил abort()
сделать это для нас, конечно.