У меня есть ситуация, когда я хочу отменить отложенный. Отложенный связан с вызовом ajax.
Я не использую обычные объекты xhr, возвращаемые $.ajax. Я использую jsonp, что означает, что я не могу использовать коды состояния HTTP для обработки ошибок и должен встраивать их в ответы. Затем коды проверяются, и связанный отложенный объект помечается как решенный или отклоненный соответственно. У меня есть пользовательская функция API, которая делает это для меня.
function api(options) {
var url = settings('api') + options.url;
var deferred = $.Deferred(function(){
this.done(options.success);
this.fail(options.error);
});
$.ajax({
'url': url,
'dataType':'jsonp',
'data': (options.noAuth == true) ? options.data : $.extend(true, getAPICredentials(), options.data)
}).success(function(jsonReturn){
// Success
if(hasStatus(jsonReturn, 'code', 200)) {
deferred.resolveWith(this, [jsonReturn]);
}
// Failure
else {
deferred.rejectWith(this, [jsonReturn]);
}
});
return deferred;
}
Существует поле ввода, которое служит фильтром для списка и автоматически обновляет список через полсекунды после окончания ввода. Поскольку два ajax-вызова могут быть невыполненными одновременно, мне нужно отменить предыдущий вызов, чтобы убедиться, что он не возвращается после второго и не показывает старые данные.
.fail()
.Есть ли способ отменить отложенные или удалить любые прикрепленные обработчики?
Приветствуются советы о том, как исправить мой дизайн, но предпочтение будет отдано тому, чтобы найти способ удалить обработчики или предотвратить их срабатывание.