如何强制XMLHttpRequest同步 - (“GET”,addrServletURL,false)不同步100%

时间:2011-07-24 19:30:05

标签: javascript xmlhttprequest synchronous

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;

2 个答案:

答案 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.
}

你应该没事。