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;
答案 0 :(得分:0)
根据我的经验,同步请求方法往往不能在浏览器中保持稳定。
如果要在响应完全加载后解析响应,请使用异步请求,将函数绑定到onreadystatechange
属性并检查readyState == 4
(即完全加载)然后处理它。
答案 1 :(得分:0)
为什么要进行同步传输?您可以使用回调并向用户显示尚未完成请求的消息。
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.
}
你应该没事。