jQuery ajax请求总是调用done或fail方法吗?

时间:2015-02-07 21:28:06

标签: jquery ajax

我有一个简单的ajax请求来加载更多帖子。我正在考虑在一个人加载更多时使用锁定"调用ajax请求以防止调用"加载更多"多次。计划是在调用时锁定ajax请求方法,并在使用request.done或request.fail方法返回时释放锁。 有没有jQuery ajax请求不会调用其中任何一种方法(例如短暂丢失Internet连接)?

1 个答案:

答案 0 :(得分:1)

在所有包装器之下,jQuery的ajax只是一个XMLHttpRequest。 XMLHttpRequest可以处于以下状态之一:

  • UNSENT(数值0):对象已构建。

  • OPENED(数值1):已成功调用open()方法,并且可以使用send()方法发出请求。

  • HEADERS_RECEIVED(数值2):已遵循所有重定向(如果有)并且已收到最终响应的所有HTTP标头。该对象的几个响应成员现在可用。

  • LOADING(数值3):正在接收回复实体正文。

  • DONE(数值4):传输过程中数据传输已完成或出现问题(例如无限重定向)。

基本上,在请求为DONE后,您是否会在OPENED未达到HEADERS_RECEIVED的情况下询问是否存在这种情况。

如果有无限重定向,我们会从DONE跳转到LOADING(状态失败)并且请求已完成。
如果重定向成功,我们会继续DONE,如果成功收到数据,则会继续timeout

然而,如果数据从未收到并且我们还在等待怎么办? XMLHttpRequest有一个属性{{1}},它指定在超时请求失败多少毫秒。然而,根据this question,jQuery 没有为它提供默认的非空值(我自己没有检查过,答案可能已经过时,你和#39;我必须参考最新的来源)。某些浏览器具有内置的超时默认值,但它们因供应商而异。

因此,如果您没有手动配置超时,那么可能虽然不太可能,但请求会无限期挂起。因此,实现故障安全超时是明智的。