为什么不readyState == 0 work

时间:2018-04-11 15:23:49

标签: javascript ajax xmlhttprequest

所以我的问题是当我使用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();

}

2 个答案:

答案 0 :(得分:0)

Okey我用readyState以某种方式工作2.谢谢大家,我很抱歉浪费你的时间。

下面的解决方案代码

var postPlaceFormIsOpen = 0;
function postPlacesForm() {
    var yhteys = new XMLHttpRequest();
    yhteys.onreadystatechange = function() {
        if(this.readyState === 2) {
            if(postPlaceFormIsOpen === 0) {

            }
         else {
            yhteys.abort();
            console.log("test");
            document.getElementById("places").style.display = "block";
            document.getElementById("ajax_close").style.dispaly = "block";
        }
    }
    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";
        postPlaceFormIsOpen++;
        console.log(postPlaceFormIsOpen);
    }

};
yhteys.open("POST", "/js/ajax_inc/forms/postplaces.php", true);
yhteys.send();

}

答案 1 :(得分:-2)

看起来你还不了解readyState财产。

  • 0已创建UNSENT客户端。 open()尚未调用。
  • 1已打开open()。
  • 已调用HEADERS_RECEIVED send(),并且标题和状态可用。
  • 3加载下载; responseText保存部分数据。
  • 4 DONE操作完成。

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState