繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM