Javascript XMLHttpRequest上的页面冻结

Javascript XMLHttpRequest上的页面冻结,javascript,xmlhttprequest,Javascript,Xmlhttprequest,我在一个网站上工作。我们每1分钟请求一次新的警报。我们正在使用Javascript和c#处理程序进行该操作。 javascript部分是: var url = "/myurl"; var xmlhttp = new XMLHttpRequest(); xmlhttp.open("GET", url , false); xmlhttp.send(); var xmlDoc = null; xmlDoc = xmlhttp.responseXML; 我的问题可能是什么原因 还有一件事。这条路对吗

我在一个网站上工作。我们每1分钟请求一次新的警报。我们正在使用Javascript和c#处理程序进行该操作。 javascript部分是:

var url = "/myurl";
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", url , false);
xmlhttp.send();
var xmlDoc = null;
xmlDoc = xmlhttp.responseXML;
我的问题可能是什么原因

还有一件事。这条路对吗

xmlhttp.open("GET", url , false);
您可以将XMLHttpObject作为非异步(即同步)打开。因此,页面将冻结,直到请求url完全加载

试试这个:

xmlhttp.open("GET", url , true);
但是,如果进行异步调用,则必须使用XMLHttpObj.onreadystatechange定义回调处理程序。您可以查看Jorrit Schippers的答案以了解完整的用例

Ajax调用在internet上有很好的文档记录,我建议您在那里查找一些文档/教程


编辑:对于你的最后一个问题,这不是完全正确的方式,你的代码不是跨浏览器的,并且会在某些IE版本上崩溃。最好使用像jQuery这样的框架,因此您只需执行以下操作:

$.ajax({
 url: 'http://Whaterver.com/doc.xml',
 success: function( data ) {
   myDoc = data;
 }
});

这可能是因为您正在向服务器发送同步调用,而服务器正在等待响应。而是使用异步调用来获取响应:

xmlhttp.open("GET", url , true);

您应该使用异步代码。因为您的代码此时是同步的,它将在
xmlhttp.send()之后停止页面执行

尝试以下方法:

var url = "/handlers/doS.ashx?id=s101";
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", url , true);
xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        var xmlDoc = xmlhttp.responseXML;
        // Do something here
    }
}
xmlhttp.send();

对于异步请求,XMLHttpRequest中的第三个参数应该为true(表示非阻塞事务)

引自

可选的布尔参数,默认为true,指示是否异步执行操作。如果此值为false,则在收到响应之前,send()方法不会返回

您应该查看有关如何管理异步请求的示例

安托万