代码之家  ›  专栏  ›  技术社区  ›  Glafuski

为什么readyState==0不起作用

  •  -1
  • Glafuski  · 技术社区  · 6 年前

    所以我的问题是当我使用 if(this.readyState == 0) 它没有完成它的工作。我有一个用ajax加载表单的脚本,我可以选择关闭表单,但后来我意识到,如果我想再次打开表单而不发出新的ajax请求,我需要某种变量。我有一个名为“isOpen”的变量,当xhr readyState为0时,我希望它检查isOpen是否为true,如果为true,它将中止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 回复  |  直到 6 年前
        1
  •  0
  •   Glafuski    6 年前

    好吧,我在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();
    
    }
    
        2
  •  -2
  •   Charlie    6 年前

    看来你不明白 readyState 还没有财产。

    • 已创建0个未发送的客户端。尚未调用open()。
    • 已调用1 open open()。
    • 已调用2 HEADERS\u RECEIVED send(),并且HEADERS和status可用。
    • 3加载下载;responseText保存部分数据。
    • 4完成操作完成。

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