页面冻结在XMLHttpRequest上

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了页面冻结在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;

我的问题可能是什么原因?

还有一件事。这是正确的方法吗?

答案

您应该使用异步代码。因为此时您的代码是同步的,所以它将在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(表示非阻塞事务)。

引自MDN Documentation

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

您应该查看there以获取有关如何管理异步请求的示例。

安托万

另一答案

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

xmlhttp.open("GET", url , true);
另一答案
xmlhttp.open("GET", url , false);

你打开你的XMLHttpObject非同步,也就是说,同步。因此页面将冻结,直到请求URL已完全加载。

试试这个:

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

但是,如果你创建一个异步,你将不得不使用yourXmlHttpObj.onreadystatechange定义一个回调处理程序。您可以查看Jorrit Schippers对完整用例的回答。

Ajax调用在互联网上有很好的文档记录,我建议你在那里寻找一些文档/教程。


编辑:对于您的上一个问题,这不是正确的方式,您的代码不是跨浏览器,并将在某些IE版本上崩溃。更好地使用像jQuery这样的框架,所以你只需要点击:

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

以上是关于页面冻结在XMLHttpRequest上的主要内容,如果未能解决你的问题,请参考以下文章

原生JS发送Ajax请求JSONP

JDBC操作数据库之查询数据

如何识别Squarespace上代码块中的冲突代码?

Flutter线上代码覆盖率解决方案——FlutterCodeX

php 实现购物车功能,以大苹果购物网为例,上图上代码。。。。

pbootcms对接微信扫码登录代码核心片段和步骤(前后端)