[英]How to force XMLHttpRequest to be synchronous - (“GET”,addrServletURL,false) is not synchronous 100%
enter code here
以下是我的代码当与IE浏览器连接时,客户端将等待服务器响应以处理数据解析-服务器需要一些时间将结果发送回客户端,因为它正在调用外部系统以获取数据所以恢复,当IE是我的浏览器时我没有问题
但是的确,当我的浏览器是下面代码中的Safari(请参阅我的完整代码)时,警报将在一段时间后显示,这意味着客户端没有在等待服务器响应,这给我造成了潜在的问题。 我的问题是如何在与Safri一起使用XMLHttpRequest时如何强制客户端等待服务器响应
xmlDoc= new XMLHttpRequest();
xmlDoc.open("GET",addrServletURL,false);
xmlDoc.send("");
// Check results
if ((xmlDoc == null) ||(xmlDoc.responseXML == null)){
alert(pageDefs.msg["ADDRESS_HELP_NOT_AVAILABLE"]);
return result;
}
nodes=xmlDoc.responseXML.documentElement.childNodes;
topElement=xmlDoc.responseXML.documentElement.nodeName;
根据我的经验,同步请求方法在各种浏览器中往往不稳定。
如果要在响应完全加载后解析响应,请使用异步请求,将函数绑定到onreadystatechange
属性,然后检查readyState == 4
(即完全加载),然后对其进行处理。
为什么要进行同步传输? 您可以使用回调并向用户显示一条消息,请求尚未完成。
xmlDoc.onstatechange = function(){
if ( xmlDoc.readyState == 4 && xmlDoc.responseXML ){
// Execute important other code here. responseXML is loaded.
// Check results
if ((xmlDoc == null) ||(xmlDoc.responseXML == null)){
alert(pageDefs.msg["ADDRESS_HELP_NOT_AVAILABLE"]);
return callback(result);
}
nodes=xmlDoc.responseXML.documentElement.childNodes;
topElement=xmlDoc.responseXML.documentElement.nodeName;
}
};
把它包起来
doStuff(callback){
// xmldoc code here.
}
你应该没事的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.