XML HTTP请求-处理连接丢失

时间:2018-09-26 07:31:24

标签: javascript jquery xmlhttprequest

有人可以解释为什么当连接良好时这不能正常工作吗?如果我断开连接,则可以正常运行,但是,如果我仍然保持连接,则仍显示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" );
  }
 };

1 个答案:

答案 0 :(得分:0)

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

  1. 未发送(值0)
  2. OPENED(值1)
  3. HEADERS_RECEIVED(值2)
  4. LOADING(值3)
  5. 完成(值4)

使用new XMLHttpRequest()时,readyState为0。在此过程中(例如,使用.open(...).send(...)时),readyState的值会更改。对于每次更改,正在执行分配给.onreadystatechange的功能。

在此过程中,它将评估以下条件。

if (xmlhttp.readyState==4 && xmlhttp.status==200)

由于readyState尚未达到DONE状态(值4),因此上述条件为false。因此,else块正在执行。如果您想防止这种情况发生(换句话说,只有在请求完成后才执行操作),请使用以下方法:

if (xmlhttp.readyState==4) {
  if (xmlhttp.status==200) {
    // handle on success
  }
  else {
    // handle error situation
  }
}