javascript - 使用Javascript向服务器发送多个请求,直到服务器返回200

标签 javascript html ajax server restart

我创建了一个 html 页面,用户在等待另一个应用程序重新启动时可以查看该页面。我创建了一个 javascript 脚本,它向应用程序发出多个请求,直到应用程序返回 200。但是,当我尝试打开 html 页面时,浏览器会崩溃。任何人都可以看到我的代码有什么问题吗:

var responseStatus = 404;
var numberOfTries = 0;
var request = new XMLHttpRequest(); 
while(responseStatus != 200){
    console.log("Checking if restart has completed. Attempt number: " + numberOfTries);
    request.open('GET', 'applicationurl', true);
    request.onreadystatechange = function(){
        if (request.readyState === 4){
            console.log("Request Status: " + request.status);
            responseStatus = request.status;
            console.log("Response Status: " + request.status);
            if (request.status != 200) {  
                numberOfTries++;
                console.log("Restart has not yet completed! NumberOfTries: " + numberOfTries);
            }  
        }
    };
    request.send();
}
console.log("Server has successfully restarted");

最佳答案

(在我看来)做到这一点的最佳方法是实际结合 @serge1peshcoff 的两个选项。将调用编写为响应失败时调用自身的函数,并在执行此操作时设置超时。对于大多数目的,您不想在前一个请求之后立即发送另一个请求,您需要等待至少一到五秒以防止向服务器发送垃圾邮件(您也没有给出您期望有多少客户端的指示。什么是对你的浏览器不利对服务器来说可能是可怕的,服务器甚至可能在你的网络应用程序完全启动并返回 200 之前就处理请求)。

此外,setTimeout 是比 setInterval 更好的方法,因为您可以在每次往返时显式重置它。

借用@serge:

function tryRequest(numTries) {
  var responseStatus = 404;
  var request = new XMLHttpRequest(); 
  numTries = numTries || 0;

  console.log("Checking if restart has completed. Attempt number: " + numAttempts);
  request.open('GET', 'applicationurl', true);
  request.onreadystatechange = function(){
      numTries++

      if (request.readyState === 4){
          console.log("Request Status: " + request.status);
          responseStatus = request.status;
          console.log("Response Status: " + request.status);
          if (request.status != 200) {  
              console.log("Restart has not yet completed! NumberOfTries: " + this.attempts);
              setTimeout(tryRequest.bind(null, numTries), 5000); // five seconds
          }  
      }
  };
  request.send();

  console.log("Server has successfully restarted");
}
tryRequest();

关于javascript - 使用Javascript向服务器发送多个请求,直到服务器返回200,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39790706/

相关文章:

javascript - 我怎样才能获得一个只有原始值的唯一值的新 json

javascript - 为什么转换时 JavaScript 中的日期不匹配?

javascript - 错误 : Uncaught (in promise): Failed to load login. component.html

javascript - Bootstrap 轮播没有响应

javascript - 如何通过AJAX检索使用POST方法创建的表?

javascript - 当元素 id 出现在视口(viewport)中并出现 jquery 时发出警报

php - 启动时,每 10 秒运行一次 AJAX 请求

javascript - 将 Require.js 与可插入模块结合使用

javascript - 在外部按钮上触发一个 div/<a> 点击光滑的 slider

javascript - 尝试使用列样式和每列 4 个 div,但样式不正确