Как заставить XMLHttpRequest быть синхронным - («GET», addrServletURL, false) не является синхронным 100% - PullRequest
0 голосов
/ 24 июля 2011

enter code here Ниже мой код При соединении с браузером IE клиент будет ждать ответа сервера для обработки анализа данных - серверу требуется некоторое время, чтобы отправить результат клиенту, потому что он вызывает внешнюю систему для получения данных Таким образом, чтобы возобновить, у меня нет проблем, когда IE мой браузер

Но действительно, когда мой браузер Safari в приведенном ниже коде (см. Мой полный код), через некоторое время будет отображаться предупреждение, что означает, что клиент не ожидает ответа сервера, и это создает потенциальную проблему для меня. Мой вопрос, как я могу заставить клиента ждать ответа сервера при использовании XMLHttpRequest с Safri

       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 голосов
/ 24 июля 2011

Почему вы хотите делать синхронные переводы? Вы можете использовать обратный вызов и отобразить сообщение для пользователей, запрос еще не сделан.

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

и с тобой все будет в порядке.

0 голосов
/ 24 июля 2011

Исходя из моего опыта, подход с синхронными запросами имеет тенденцию не работать стабильно в разных браузерах.

Если вы хотите проанализировать ответ после его полной загрузки, используйте асинхронный запрос, привязайте функцию к onreadystatechange свойство и проверьте readyState == 4 (то есть полностью загружен), затем обработайте его.

...