Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检测JavaScript中的Ajax请求是否失败_Javascript_Ajax_Xmlhttprequest - Fatal编程技术网

检测JavaScript中的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

如何检测Ajax请求是否未能加载文件

这是我的代码供参考

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.");
}