如何强制程序等待 HTTP 请求在 JavaScript 中完成?

新手上路,请多包涵

JavaScript 中有没有一种方法可以向 HTTP 服务器发送 HTTP 请求并等待服务器响应回复?我希望我的程序等到服务器回复并且不执行此请求之后的任何其他命令。如果HTTP服务器宕机我希望在超时后重复HTTP请求,直到服务器回复,然后程序才能继续正常执行。

有任何想法吗?

提前谢谢你,萨纳西斯

原文由 Thanasis Petsas 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 526
1 个回答

_编辑: 同步请求 现已弃用;您应该始终以异步方式处理 HTTP 请求。_

XmlHttpRequestopen() 有一个第三个参数,它旨在表明您希望异步请求(并通过 onreadystatechange 处理程序)。

因此,如果您希望它是同步的(即等待答案),只需为第三个参数指定 false 即可。在这种情况下,您可能还想为您的请求设置一个有限的 timeout 属性,因为它会在接收之前阻止页面。

这是同步和异步的一体化示例函数:

 function httpRequest(address, reqType, asyncProc) {
  var req = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
  if (asyncProc) {
    req.onreadystatechange = function() {
      if (this.readyState == 4) {
        asyncProc(this);
      }
    };
  }
  req.open(reqType, address, !(!asyncProc));
  req.send();
  return req;
}

你可以这样称呼它:

 var req = httpRequest("http://example.com/aPageToTestForExistence.html", "HEAD");  // In this example you don't want to GET the full page contents
alert(req.status == 200 ? "found!" : "failed");  // We didn't provided an async proc so this will be executed after request completion only

原文由 Jérôme Beau 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题