检测JavaScript中的Ajax请求是否失败
如何检测Ajax请求是否未能加载文件 这是我的代码供参考:检测JavaScript中的Ajax请求是否失败,javascript,ajax,xmlhttprequest,Javascript,Ajax,Xmlhttprequest,如何检测Ajax请求是否未能加载文件 这是我的代码供参考: var pro = undefined; var xmlhttp; if (window.XMLHttpRequest){ xmlhttp = new XMLHttpRequest(); } else{ xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange = function(){ if (xmlhttp.rea
var pro = undefined;
var xmlhttp;
if (window.XMLHttpRequest){
xmlhttp = new XMLHttpRequest();
}
else{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
pro = JSON.parse(xmlhttp.responseText);
}
}
xmlhttp.open("GET","data.json",true);
xmlhttp.send();
请不要用jQuery。
谢谢 您可以检查http状态是否为500或大于500,这意味着请求中发生了错误
<强>注:您也可以考虑其他HTTP状态编号,如
,您不需要太多。在else子句中执行注释以外的操作xmlhttp.onreadystatechange = function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
pro = JSON.parse(xmlhttp.responseText);
} else {
if (xmlhttp.readyState==4) {
// Something failed
}
}
}
我所做的是使用一个全局变量,我称之为‘回飞镖’(我知道这很有意思) 因此,当您发送请求时,使boomerang=1,然后在成功时使boomerang=0
然后,在发送请求后的某个适当时间,您只需检查回飞棒=1或=0您需要检查状态代码-4xx和5xx代码是错误的
下面是代码列表:
onerror
回调用于处理错误,如下所示:
xmlhttp.onerror = function onError(e) {
alert("Error " + e.target.status + " occurred while receiving the document.");
}
据我所知,jQuery库也使用这种方法。不确定哪些浏览器都支持此功能,但这在firefox中肯定有效。如果http状态为302怎么办?还是不是200?这不是一个失败,因为你不应该得到任何不在200范围内的东西。302告诉请求对象还有更多的事情要处理。任何其他请求都将被视为失败。因此,在您的代码中,您永远不会处理超过一个请求?@zerkms否如果我有多个或可能有多个请求,那么每次有一个请求发出时,我都会执行boomerang++和成功后的boomerang--。因此,我在计算发出的请求与返回的请求之间的平衡,假设在发送了几个请求之后,结果是
boomerang==5
。它有多大帮助?你仍然不知道哪个失败了。所以你不能正确处理它。顺便说一句,“适当的时间”是一个奇怪的术语。在我遇到的情况下,无论哪个请求丢失/失败,我们只需要知道是否有任何请求失败。我们也有一个适当的时间,如果在10秒钟的时间间隔内有任何丢失/失败的请求,我们只需记录它就行了没有jQuery?我很想投票否决你@史蒂文·韦伦斯为什么投反对票?我只是想避免使用jQuery。避免jQuery就像避免轮子一样。jQuery帮助您。(我开玩笑的,我没有投你反对票)。@zerkms 503(服务不可用)从技术上讲不是一个错误吗?@Progo:是的。最初的答案是xmlhttp.status==500
,其中不包括503
,并进行了修改afterwards@zerkms哦,对不起,我不知道@虫族很抱歉没有通知任何人我所做的更改=)
xmlhttp.onerror = function onError(e) {
alert("Error " + e.target.status + " occurred while receiving the document.");
}