我的代码中有很多地方正在加载片段:
$('<div />').load('/some/thing/', function() { /* put it somewhere */ });
我还有一个ajaxError
处理程序:
$(document).ajaxError(function(event, jqxhr, settings, exception) {
if (jqxhr.status = 401) {
return alert('401!!');
}
if (jqxhr.status = 404) {
return alert('404!!');
}
return alert('boo!');
});
但是,即使触发了ajaxErro
r,仍会触发与负载关联的处理程序。有没有办法取消&#34;已完成&#34;处理程序(用于触发加载程序的内容)来自ajaxErro
r。
我玩过Deferred,但问题似乎是我无法访问completeDeferred
对象。在jQuery ajax.js中:
jqXHR.complete = completeDeferred.add;
然而,.add()
方法毫无用处。如果我只能以某种方式调用底层延迟对象的.empty()
方法..
有什么想法吗?
编辑:我不关心中止HTTP请求。它做得很好。我只想保持回调(我通过.load()
附加)来解雇。
答案 0 :(得分:3)
问题是因为load
的最终参数等同于complete
的{{1}}参数。这意味着无论请求是否成功,它都会运行。我建议您将$.ajax
更改为.load()
调用,以便更好地控制逻辑流程。试试这个:
$.ajax
答案 1 :(得分:3)
您必须从.load
切换到更通用的AJAX方法,否则从事件处理程序中检测失败。
检测失败:
$('<div />').load('/some/thing/', function(response, status, xhr) {
if (status === "error") return;
// your existing code goes here
});
使用更通用的方法:
$.get("/some/thing/").done(function(response) {
$("<div />").html(response) // etc etc
});