如何在循环中测试就绪状态和状态以避免 else 分支

How do I test against readystate and status in a loop to avoid the else branch ?

本文关键字:状态 分支 else 就绪状态 循环 测试      更新时间:2023-09-26

我有这段代码,它使用异步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 条件失败,直到就绪状态达到 4,导致我单击警报框 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!”);
        }
    }
};