首页 > 解决方案 > 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" );
  }
 };

标签: javascriptjqueryxmlhttprequest

解决方案


使用XMLHttpRequest时,.onreadystatechange是一个事件处理程序,每次readyState更改时都会调用它。其中有五个(来源):

  1. 未发送(值 0)
  2. 已打开(值 1)
  3. HEADERS_RECEIVED(值 2)
  4. 正在加载(值 3)
  5. 完成(值 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
  }
}

推荐阅读