【发布时间】:2018-04-11 15:23:48
【问题描述】:
所以我的问题是当我使用if(this.readyState == 0)
它不做它的工作。我有一个用 ajax 加载表单的脚本,我可以选择关闭表单,但后来我意识到,如果我想再次打开该表单而不发出新的 ajax 请求,我将需要某种变量。我有一个名为“isOpen”的变量,当 xhr readyState 为 0 时,我希望它检查 isOpen 是否为真,如果它为真,它会中止 xhr 并显示表单数据。现在它似乎没有像我预期的那样工作。
这是我处理这个 AJAX 请求的全部函数。
function postPlacesForm() {
var yhteys = new XMLHttpRequest();
yhteys.onreadystatechange = function() {
var isOpen = false;
if(this.readyState === 0) {
if(isOpen === false) {
}
else if(isOpen === true) {
document.getElementById("places").style.display = "block";
yhteys.abort();
}
}
if(this.readyState === 4 && this.status === 200) {
document.getElementById("places").innerHTML = this.responseText;
document.getElementById("places").style.display = "block";
document.getElementById("ajax_close").style.display = "block";
isOpen = true;
}
};
yhteys.open("POST", "/js/ajax_inc/forms/postplaces.php", true);
yhteys.send();
}
【问题讨论】:
-
不确定,但我的猜测是 readyState 值从
0开始,readystatechange事件发生在readyState值更改为非零值之后。 -
您可能会做的一件事是将
console.log(this.readyState)放在处理函数的顶部,以便您知道它实际上是什么。 -
if(isOpen === false) {将永远为真。 总是。 所以如果 readystate 为 0 无关紧要,因为无论如何你都不会做任何事情。 -
使用浏览器控制台使用
console.log(this.readyState)或debugger;时,基本调试向您展示了什么? -
你看过documentation 的
readyState吗?你做过什么类型的调试?
标签: javascript ajax xmlhttprequest