发送ajax请求并接收响应(已同步)

时间:2016-11-21 10:40:45

标签: javascript html ajax xmlhttprequest response

我正在发送ajax请求并在我的js / html应用程序中处理响应。设备 Windows Mobile CE ,没有jquery支持,设备浏览器(IE)不支持eventhandler,所以我不能使用asynch调用。无论如何,我的问题是,在发送事件之前,我想显示一个请等待消息,一旦收到回复,我想再次隐藏它。

function sendRequest() {
// make please wait visible
document.getElementById("pleasewait").style.display = "block";
console.log("pleasewait visible.");

var XHR = new XMLHttpRequest();
// synch call

XHR.send(sendData);

// suppose it takes 20-30 seconds
console.log("response received :" + XHR.responseText);

XHR.open('POST', 'url', false); 

// make please wait hidden
document.getElementById("pleasewait").style.display = "none";
}

但是,当我运行它时,当我们收到响应(而不是在发送之前)时,pleasewait元素变得可见,并且即使该过程需要例如20-30秒,也会立即再次隐藏。控制台消息以正确的顺序显示,但请求等待元素未正确更新。我尝试了一些setTimeouts但没有想要的结果。我无法添加一些jsfiddle,因为很难在远程实现ajax请求处理程序。

1 个答案:

答案 0 :(得分:1)

  

浏览器会在执行同步 ajax请求时冻结,因此synchronous请求会阻止显示重新流动!

我建议的唯一解决方案是setTimeout使用0持续时间!

function sendRequest() {
  document.getElementById("pleasewait").style.display = "block";
  setTimeout(function() {
    var XHR = new XMLHttpRequest();
    XHR.send(sendData);
    console.log("response received :" + XHR.responseText);
    XHR.open('POST', 'url', false);
    document.getElementById("pleasewait").style.display = "none";
  }, 0);
}

注意: Here是一些相关信息!