javascript - XML HTTP 请求 - 处理连接丢失
问题描述
有人可以解释为什么当连接良好时这不能正常工作吗?如果我失去连接,它会完美运行,但是,如果我仍然有连接,仍然会显示 if 和 else 响应。
var xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("inventory-info-details").innerHTML=xmlhttp.responseText;
$('.loader').toggleClass('load-complete');
$('.checkmark').toggleClass('checkmarkShow');
$("#tableDiv").load("inventoryList_printOut.php");
}
else
{
$("#loadError").css( "display", "block" );
$("#inventory-info-details").css( "display", "none" );
}
};
解决方案
使用XMLHttpRequest
时,.onreadystatechange
是一个事件处理程序,每次readyState
更改时都会调用它。其中有五个(来源):
- 未发送(值 0)
- 已打开(值 1)
- HEADERS_RECEIVED(值 2)
- 正在加载(值 3)
- 完成(值 4)
使用new XMLHttpRequest()
时,readyState
为 0。在此过程中(例如使用.open(...)
,时.send(...)
),readyState
值会发生变化。对于每次更改,分配给 的功能.onreadystatechange
正在执行。
在此过程中,它评估以下条件。
if (xmlhttp.readyState==4 && xmlhttp.status==200)
由于 readyState 尚未达到DONE
状态(值 4),因此上述条件为假。因此,else
正在执行该块。如果您想防止这种情况(换句话说,仅在请求完成时执行该操作),请使用以下方法:
if (xmlhttp.readyState==4) {
if (xmlhttp.status==200) {
// handle on success
}
else {
// handle error situation
}
}
推荐阅读
- macos - .NET5 构建使用 BigSur (SIGABRT) 崩溃
- java - 我的 FeignClient 为服务器响应保持连接打开但服务器在返回任何内容之前等待我的客户端关闭连接
- kubernetes - kubernetessingress 路由到另一个服务
- django - RabbitMQ 中的更新队列
- c# - 如何在 C# 中模拟 out 变量?
- verilog - ModelSim 10.5 All Optimizations are Disabled Error
- sql - SCCM / SQL Multiple values to one column
- javascript - How to group JSON data into week object based on DATE in Node JS/Javascript?
- arrays - Save dynamic size of Ros messages in arrays
- java - Spring application starts with wrong page