2012-02-07 271 views
4

我使用“error”选项设置了一个JQuery Ajax调用。在我的“错误”方法中,我想处理HTTP 408与正常的HTTP 500不同。在JQuery ajax中,如何正确处理HTTP 408错误?

问题是jxhr.statusCode为0,“状态”值只是“错误”!但在萤火虫,我可以看到,该服务绝对返回状态代码408.

为什么jxhr.statusCode是0?是否有另一种方法来识别HTTP 408错误?

我的错误处理代码如下(为一个408错误代码只是延续到“其他”块):

error: function (jxhr, status, error) { 
var $message = element.next().find('.loadmask-msg-label'); 
if (jxhr.status == 401) 
    $message.html(settings.unauthorizedMessage); 
else if (jxhr.status == 408) 
    $message.html(settings.timeoutMessage); 
else 
    $message.html(settings.errorMessage); 

回答

3

问题是FIREFOX。在除Firefox以外的任何浏览器中,状态码都是408.在Firefox中,状态码为0,并且不返回任何响应标头。另外,由于408响应,Firefox似乎重新请求了10次,我不知道为什么!这仅适用于HTTP 408响应。

最后,我们不得不用自定义标题返回HTTP 500错误。

脏:(

+2

我也遇到了这个问题。我的服务器返回了预期的408,Firefox只是保留然后我打开了一个错误报告:https://bugzilla.mozilla.org/show_bug.cgi?id = 907800 – 2013-08-21 17:49:13

+0

似乎仍然是Firefox处理408错误,因为它拒绝状态码0并且在第一个请求上不会解析导致408的请求。在后续的请求中对于相同的网址,该请求被408拒绝,因为它应该是。 – hvrauhal 2016-05-06 07:52:25

3

据jQuery的你应该这样做:

enter image description here

$.ajax({ 
    statusCode: { 
    404: function() { 
     alert('page not found'); 
    } 
    } 
}) 

;

+0

不,我怕我的代码仍然进入0:部分而不是408吗?你通过检查文本,而不是代码段考虑:( – willem 2012-02-07 16:34:26

+0

@willem – 2012-02-07 16:39:28

+0

我做。'status'文本是'error'。'error'文本是''。不知道还有什么需要检查: – willem 2012-02-07 16:49:42