1

我有这个使用异步 AJAX 对象 xmlhttp 的代码

xmlhttp.open(’GET’, url, true);
xmlhttp.onreadystatechange = function ()
{

    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
        alert(xmlHttp.responseText);
    }
    else
    {
        alert(”Error: Failed request!”);
    }
};
xmlHttp.send(null); 

我知道我的问题是 if 条件失败,直到 readystate 达到 4 导致我点击警告框 3 次,

我认为答案是在循环中测试就绪状态和状态以避免这种情况,但我不确定如何编写正确的循环。

4

1 回答 1

3

如评论中所述,不需要循环。需要更好地理解 4 之前的 readystate 值:它们并不意味着失败——请参阅https://stackoverflow.com/a/632800/34806,尤其是“在实践中,您几乎从不使用它们中的任何一个,除非4"。

可能意味着失败的是没有返回 xmlhttp.status == 200 (“在大多数情况下,您可以假设 200 以外的任何内容都是错误情况。” - 请参阅http://ajaxpatterns.org/XMLHttpRequest_Call#Detecting_Errors)。牢记所有这些,您的代码可以重写如下:

xmlhttp.onreadystatechange = function () {
    if (xmlhttp.readyState==4) {
        if (xmlhttp.status==200) {
            alert(xmlHttp.responseText);
        }
        else {
            alert(”Error: Failed request!”);
        }
    }
};
于 2014-12-16T20:55:14.530 回答