我正在网站上工作。我们每1分钟要求新的警报。我们正在使用Javascript和c#处理程序进行该操作。 javascript部分是:
var url = "/myurl";
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", url , false);
xmlhttp.send();
var xmlDoc = null;
xmlDoc = xmlhttp.responseXML;
我的问题可能是什么原因?
还有一件事。这是正确的方法吗?
答案 0 :(得分:5)
您应该使用异步代码。因为此时您的代码是同步的,所以它将在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();
答案 1 :(得分:3)
对于异步请求,XMLHttpRequest中的第三个参数应为true(表示非阻塞事务)。
可选的布尔参数,默认为true,指示是否异步执行操作。如果此值为false,则send()方法在收到响应之前不会返回。
您应该查看there,了解有关如何管理异步请求的示例。
安托
答案 2 :(得分:2)
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;
}
});
答案 3 :(得分:2)
这可能是因为您正在向服务器发送同步调用,并且正在等待响应。而是使用异步调用来获取响应:
xmlhttp.open("GET", url , true);