如何在循环中测试就绪状态和状态以避免 else 分支
How do I test against readystate and status in a loop to avoid the else branch ?
我有这段代码,它使用异步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!”);
}
}
};
相关文章:
- 事件和状态
- 获取选择框的状态
- 相位器状态未捕获参考错误
- 如何更改reactjs中外部/独立组件的状态或属性
- 如何使用密码检测网络中的状态连接
- Ember.js-接口状态应该存储在哪里
- 混合 ui-sref 和 $state.go 在 Angular ui-router 中进行状态转换
- 在Angular 2中布线期间保持零部件处于活动状态
- 在mvc应用程序中,在回发时保留最初隐藏的文本框的隐藏或可见状态
- XMLHttpRequest未返回值-状态202
- 使用javascript反复检查用户在facebook上的登录状态
- 如何使bxslider仅在移动视图中处于活动状态
- 获取ASP.NET Ajax Timer状态
- React redux初始化功能,无论状态变化如何
- 无法在现有状态转换期间更新-未使用任何非法的setState()
- 悬停下拉菜单即使在鼠标移出后也保持活动状态
- 从组件状态的数组中删除元素
- iOS 中的按钮触摸状态
- 如何在循环中测试就绪状态和状态以避免 else 分支
- 当状态树的两个分支具有相同的选择器名称时,如何管理redux选择器