2012-04-06 16 views
3

糟糕的状态代码,我有一个非常简单的Ajax请求:jQuery的:清洁处理从阿贾克斯

$.get(url, data) 
    .done(function() { }) 
    .fail(function() { }) 

如果在url一个错误,它会返回一个状态代码,如“500”来说吧。显然,jQuery现在考虑它在jqxhr对象上的承诺,因为它将执行.done而不是.fail。我的问题是双重的:

默认情况下,当关于ajax触发.fail,并且有什么方法可以更改此默认值吗?

其次,只有这样才能有特殊处理的错误请求似乎是这样的:“坏”

.done(function (msg, tm, jqxhr) { 
    if (jqxhr.status < 200 || jqxhr.status >= 300) performFailure(); 
}); 

有没有发现和处理,将被认为是响应一个更好的办法

回答

0

寻找到这进一步后,似乎jQuery不会其实正确使用.fail()。问题在于我的服务器在发生某些错误时发出200。换句话说,这不是一个开始的jQuery问题。

0

从jQuery .get()文档:

如果有jQuery.get()请求返回错误代码,它会失败 默默地除非剧本也被称为全球.ajaxError() 方法。或者,从jQuery 1.5开始,由jQuery.get()返回的 jqXHR对象的.error()方法也可用于处理错误 。

(重点煤矿)

我没有做了很多错误处理,但它听起来就像你可能需要ajaxError调用泡出的错误条件。

+0

'.fail'和'.error'是jqxhr对象的相同方法,我正在使用它。执行'.done'(与'.success'相同),无论状态码如何。这似乎对我是有意的。顺便说一下,我使用jQuery 1.7 – 2012-04-06 19:44:53

+0

我并不是建议使用.error和.fail。我指出错误代码默默失败。在我的答案中看到斜体文字。你需要让你的脚本调用.ajaxError()来登陆错误/失败块。 – veeTrain 2012-04-06 19:50:04

+0

这是不正确的 – 2012-04-06 19:52:18

0

查看.ajax函数的文档,它有一个很好的错误处理程序:http://api.jquery.com/jQuery.ajax/您可能想使用此函数而不是get()。 (两者基本相同,您可以从此页面看到:http://api.jquery.com/jQuery.get/);

与您的代码的例子是:

 $.ajax({ 
     url: url, 
     data: data, 
     error: /*error function*/, 
     success: /*success function*/, 
    }); 
+0

这不会改变错误处理;实际上发生的事情是一样的。 – 2012-04-06 19:50:39

+0

您是否删除了.done()和.fail()的绑定? – Jlange 2012-04-06 19:51:44

+0

当URL返回错误代码,错误函数返回这个样子的错误(jqXHR,textStatus,errorThrown),它应该包含您需要妥善处理 – Jlange 2012-04-06 19:53:30