我有一种情况,我想取消延期.延迟与ajax调用相关联.
我不使用$ .ajax返回的普通xhr对象.我正在使用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;
}
Run Code Online (Sandbox Code Playgroud)
有一个输入字段用作列表的过滤器,并在键入结束后半秒自动更新列表.因为一次可能有两个ajax调用是未完成的,所以我需要取消之前的调用以确保它在第二个调用之后不返回并显示旧数据.
.fail().有没有办法取消延期或删除任何附加的处理程序?
有关如何修复我的设计的建议值得欢迎,但我们会优先考虑找到一种方法来删除处理程序或防止它们被触发.