【发布时间】:2017-02-08 23:36:48
【问题描述】:
我创建了一个 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");
【问题讨论】:
-
使用 setTimeout 方法在你的代码中设置延迟,你不断地访问服务器,而这就是你的浏览器崩溃的原因。
-
控制台在第一次登录后不记录任何内容。浏览器死机,我需要强制退出并重新打开浏览器才能再次访问 html 页面。
-
@rurounisergii 再次,这是因为您正在循环执行此操作。实际上,在一个成功之前,您将发送数百甚至数千个请求。即便如此,即使您确实收到了 200 个回复,您也可能会提前发送数百个,因为您不会等待他们返回并且它们都是异步发送的。
-
自己进行 DDoS 的好方法。并且在异步调用中使用 while 循环是行不通的。
标签: javascript html ajax server restart