ajax到location.replace(ajax.responseText)会永远重新加载

时间:2016-08-14 04:24:39

标签: javascript html ajax web

我无法弄清楚为什么会这样,并且没有它的文档:

<!DOCTYPE html>
<html>
<head>
<style>
</style>
</head>
<body>
<h1>HideSite</h1>
<script>
var ajax;
if (window.XMLHttpRequest) {
    ajax = new XMLHttpRequest();
} else {
    ajax = new ActiveXObject("Microsoft.XMLHTTP");
}

ajax.onreadystatechange = function() {
    location.replace(ajax.responseText);
}
if (navigator.userAgent == 'code') {
    ajax.open("POST", "location.txt", true);
    ajax.send();
}
</script>
</body>
</html>

location.txt包含文件的位置。

更新

而不是replace()我插入了这个:alert(ajax.responseText)。它做了三次,只有在第三次窗口实际上包含任何东西。

if (ajax.responseText != undefined && ajax.responseText != "") {
        alert(ajax.responseText);
}

当我添加它时,它只执行了两次,两次都包含正确的字符串

1 个答案:

答案 0 :(得分:0)

在AJAX调用期间,onreadystatechange事件会多次被点击;这些点击中的大多数实际上不会发送任何响应文本。准备状态如下:

0: request not initialized 
1: server connection established
2: request received 
3: processing request 
4: request finished and response is ready

就像你已经说过“每次状态更改”而不是“当响应准备就绪”时,你的AJAX通话往往还没有收到响应。我建议修改你的事件,以包含一个if语句,如下所示:

ajax.onreadystatechange = function() {
   if (ajax.readyState == 4) {   //WHEN RESPONSE IS READY
      location.replace(ajax.responseText);
   }
}