我正在发送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请求处理程序。
答案 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是一些相关信息!