Jquery 从ajaxError中止ajax加载()

Jquery 从ajaxError中止ajax加载(),jquery,ajax,deferred,Jquery,Ajax,Deferred,我的代码中有很多地方加载了这样的片段: $('<div />').load('/some/thing/', function() { /* put it somewhere */ }); 但是,即使触发了ajaxError,与加载关联的处理程序仍会被触发。是否有任何方法可以从ajaxError中取消“已完成”处理程序(用于触发加载处理程序) 我已经使用了Deferred,但问题似乎是我无法访问completeDeferred对象。在jQuery ajax.js中: jqXHR.co

我的代码中有很多地方加载了这样的片段:

$('<div />').load('/some/thing/', function() { /* put it somewhere */ });
但是,即使触发了ajaxError,与加载关联的处理程序仍会被触发。是否有任何方法可以从
ajaxErro
r中取消“已完成”处理程序(用于触发加载处理程序)

我已经使用了Deferred,但问题似乎是我无法访问
completeDeferred
对象。在jQuery ajax.js中:

jqXHR.complete = completeDeferred.add;
然而,
.add()
方法是无用的。如果我能以某种方式调用底层延迟对象的
.empty()
方法就好了

有什么想法吗


编辑:我不关心中止HTTP请求。完成了,很好。我只想阻止回调(通过
.load()
)触发。

问题在于
load
的最终参数与
$.ajax
complete
参数等效。这意味着无论请求是否成功,它都会运行。我建议将
.load()
更改为
$.ajax
调用,以便更好地控制逻辑流。试试这个:

$.ajax({
    url: '/some/thing/',
    dataType: 'html',
    success: function(html) {
        $('<div />').html(html).appendTo('#myElement');
    }
});
$.ajax({
url:“/some/thing/”,
数据类型:“html”,
成功:函数(html){
$('').html(html).appendTo('#myElement');
}
});

问题是因为
load
的最终参数与
$.ajax
complete
参数等效。这意味着无论请求是否成功,它都会运行。我建议将
.load()
更改为
$.ajax
调用,以便更好地控制逻辑流。试试这个:

$.ajax({
    url: '/some/thing/',
    dataType: 'html',
    success: function(html) {
        $('<div />').html(html).appendTo('#myElement');
    }
});
$.ajax({
url:“/some/thing/”,
数据类型:“html”,
成功:函数(html){
$('').html(html).appendTo('#myElement');
}
});

您必须从
.load
切换到更通用的AJAX方法,或者从事件处理程序中检测故障

要检测故障,请执行以下操作:

$('<div />').load('/some/thing/', function(response, status, xhr) {
    if (status === "error") return;
    // your existing code goes here
});
$(“”).load(“/some/thing/”,函数(响应、状态、xhr){
如果(状态==“错误”)返回;
//您现有的代码在这里
});
要使用更通用的方法,请执行以下操作:

$.get("/some/thing/").done(function(response) {
    $("<div />").html(response) // etc etc
});
$.get(“/some/thing/”).done(函数(响应){
$(“”).html(响应)//等
});

您必须从
.load
切换到更通用的AJAX方法,或者从事件处理程序中检测故障

要检测故障,请执行以下操作:

$('<div />').load('/some/thing/', function(response, status, xhr) {
    if (status === "error") return;
    // your existing code goes here
});
$(“”).load(“/some/thing/”,函数(响应、状态、xhr){
如果(状态==“错误”)返回;
//您现有的代码在这里
});
要使用更通用的方法,请执行以下操作:

$.get("/some/thing/").done(function(response) {
    $("<div />").html(response) // etc etc
});
$.get(“/some/thing/”).done(函数(响应){
$(“”).html(响应)//等
});

一旦启动错误处理程序,连接就已经关闭。从jQuery文档中没有什么可以中止的:这个方法是从服务器获取数据的最简单的方法。它大致相当于$.get(url、data、success),只是它是一个方法而不是全局函数,并且有一个隐式回调函数。当检测到成功响应时(即textStatus为“success”或“notmodified”),.load()将匹配元素的HTML内容设置为返回的数据。很明显,这些文件是错误的。它附加了一个完整的处理程序,但没有成功。@LauriE:文档没有错。已附加完整的处理程序,但仅在成功时才进行替换。一旦错误处理程序触发,连接已关闭。从jQuery文档中没有什么可以中止的:这个方法是从服务器获取数据的最简单的方法。它大致相当于$.get(url、data、success),只是它是一个方法而不是全局函数,并且有一个隐式回调函数。当检测到成功响应时(即textStatus为“success”或“notmodified”),.load()将匹配元素的HTML内容设置为返回的数据。很明显,这些文件是错误的。它附加了一个完整的处理程序,但没有成功。@LauriE:文档没有错。附加了一个完整的处理程序,但只有在成功后才能进行替换。谢谢Jon!第二个例子正是我需要的。我希望在100多个地方避免if(status=='error')。总有人会忘记添加它。。一般的ajax()调用非常冗长。谢谢你,Jon!第二个例子正是我需要的。我希望在100多个地方避免if(status=='error')。总有人会忘记添加它。。一般的ajax()调用非常冗长。谢谢。这是事实,更通用的形式允许灵活性。我希望通过部署单个ajax错误处理程序来避免冗长,甚至可以取消已完成的处理程序。看来这是不可能的。谢谢。这是事实,更通用的形式允许灵活性。我希望通过部署单个ajax错误处理程序来避免冗长,甚至可以取消已完成的处理程序。看来这是不可能的。