导致函数在javascript中“冻结”的原因是什么?

时间:2015-11-14 20:59:57

标签: javascript xmlhttprequest

在window.onload函数中说我调用了许多其他方法:

function window.onload(){
 method1();
 alert("test1");
 method2();
 alert("test2");
}

所以我的test1方法工作正常,我收到警告“test1”,但是看起来我的代码在方法2上“冻结”,所以没有调用警告“test2”。

这是我的test2方法的样子

function method2(){
alert("testing");
var xhr = new XMLHttpRequest();

xhr.open("GET", "url that i want to call from", true);

xhr.onload = function() {
            if (xhr.status==200) {
                alert(xhr.responseText);
                alert("yay");
            }
            else{
                alert("Aww");
            }
}

xhr.send();

}

我不明白的是为什么我甚至没有得到警告“测试”,如果我的代码冻结某处为什么它至少不运行方法中的第一行?

任何人都可以解释为什么会出现在javascript中吗?

感谢

1 个答案:

答案 0 :(得分:0)

我一直在关注准备状态变化'事件

<h2>AJAX</h2>
<button type="button" onclick="loadDoc()">Request data</button>
<p id="demo"></p>
<script>
    $(document).ready(function () {
        loadDoc();
    });
    function loadDoc() {
        var xhttp = new XMLHttpRequest();
        xhttp.onreadystatechange = function () {
            if (xhttp.readyState == 4 && xhttp.status == 200) {
                document.getElementById("demo").innerHTML = xhttp.responseText;
                alert("yay");
            }
        };
        xhttp.open("GET", "demo", true);
        xhttp.send();
    }
</script>

{{3}}

根据您提供的信息,我猜您正在遇到浏览器安全问题......

我建议使用jquery为您处理这项工作。在我使用框架的那些年里,jquery中的$(document).ready函数对我来说一直很棒。

如果你不能使用jquery,那么你需要让用户点击一个按钮才能发起你想要的http请求。

此外,如果您需要执行&#39; Awww&#39;您可以将其附加到if语句的操作,但我建议使用if else基于xhttp.readyState值或您的&#39; Awww&#39;会经常重复。