我有一个简单的ajax请求来加载更多帖子。我正在考虑在一个人加载更多时使用锁定"调用ajax请求以防止调用"加载更多"多次。计划是在调用时锁定ajax请求方法,并在使用request.done或request.fail方法返回时释放锁。 有没有jQuery ajax请求不会调用其中任何一种方法(例如短暂丢失Internet连接)?
答案 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;我必须参考最新的来源)。某些浏览器具有内置的超时默认值,但它们因供应商而异。
因此,如果您没有手动配置超时,那么可能虽然不太可能,但请求会无限期挂起。因此,实现故障安全超时是明智的。