Javascript 如何区分jQuery.fail()

Javascript 如何区分jQuery.fail(),javascript,jquery,ajax,error-handling,Javascript,Jquery,Ajax,Error Handling,对于jQuery AJAX调用(),我们使用.fail()回调来记录JavaScript错误 但是,当调用尚未完成时,.fail()函数也会被调用,但通过离开网站而被中止(但是跟踪仍然有效,因为有时有足够的时间触发window.onerror) 现在,跟踪中止的AJAX请求不是我们想要的。我们想知道请求是否有效(即响应) 是否有可能区分“AJAX调用中止”和“AJAX调用无响应”?有。fail处理程序接收三个参数:jqXHR,textStatus,和errorhorn。对于中止的请求,textS

对于jQuery AJAX调用(),我们使用
.fail()
回调来记录JavaScript错误

但是,当调用尚未完成时,
.fail()
函数也会被调用,但通过离开网站而被中止(但是跟踪仍然有效,因为有时有足够的时间触发
window.onerror

现在,跟踪中止的AJAX请求不是我们想要的。我们想知道请求是否有效(即响应)


是否有可能区分“AJAX调用中止”和“AJAX调用无响应”?

有。
fail
处理程序接收三个参数:
jqXHR
textStatus
,和
errorhorn
。对于中止的请求,
textStatus
将等于
“中止”
,因此您可以使用

$.getJSON(...).fail(function(xhr, status) { if (status == "abort") ... });

如果您对进一步筛选感兴趣,其他可能的值有
“notmodified”
“error”
“timeout”
“parserror”

复制此时
.fail()
回调的第二个参数是什么?我希望它是
中止
。现在我有一个关于
“错误”
文本状态的问题。它是如何被触发的,它意味着什么。如何找出错误是什么?我是否需要.fail回调中的第三个参数?@SimonFerndriger:这意味着请求没有通过,或者服务器返回了4xx或5xx范围内的HTTP响应代码。我从来没有发现它的实际用途;如果您想查看发生了什么,最好检查和
xhr.status
(HTTP响应代码或0,如果无法获得响应)。好的,谢谢。事实上,在你解释之后,jQuery
错误也没有任何用处。然而,
xhr.readyState
听起来很有趣。是否可以区分请求未通过(由于客户端原因)和响应是4xx还是5xx(由于服务器原因)?好的,对不起,我的问题没有正确提出。因此,不可能知道请求何时未到达
readyState 4
,如果它是由于客户端或服务器问题造成的-如果是神秘的
“错误”
?如果一个请求到达readyState 4,我只需要读取
xhr.status
,而不会触发
.fail()
?@SimonFerndriger:我真的不知道你想做什么,但你肯定会让事情变得不必要的复杂。如果您没有中止,并且请求未达到状态4,则您无法获得答案(任何答案)。这应该是你需要知道的全部<代码>失败
在这种情况下以及在您得到答案但带有错误代码的情况下都会被触发。如果同时指定
done
fail
,则始终会触发其中一个。