0

我正在发出一个ajax请求,处理服务器端可能需要很多时间。所以我想在请求过程中显示加载图像。但是在ajax请求时没有显示加载图像。

var ref = createAjaxRequest();//Ajax req is created here...
if(ref){
        showLoadingImg();
        ref.open('POST','x.jsp',false);
        ref.onreadystatechange = eventStateChange;
        ref.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        ref.setRequestHeader("Connection", "keep-alive");
        ref.send();
    }
    else{ alert("Your browser does not support this feature");
}
function eventStateChange(){
 if(ref.readyState==4 ){
    //processing response here......
   hideLoadingImg();
 }
}

function showLoadingImg();{
 /* <div id="ajaxLoading">(with background image is in page)
  It is displayed properly when I set display:inline 
  manually through developer tools of a browser.</div>
*/
  document.getElementById('ajaxLoading').style.display='inline';
}
function hideLoadingImg();{
  document.getElementById('ajaxLoading').style.display='none';
}

有什么不对的吗?

我尝试调试并发现:

  1. 虽然showLoadingImg()调用了 beforeopen()方法,但加载图像仅在ref.readyState==2.

  2. readyState==2但不幸的是,和之间的时间间隔readyState==4非常小,加载图像立即被隐藏。
    因此用户看不到加载图像...

所以,我怀疑的是,除非脚本转到readyState==2.

4

2 回答 2

2

async如果您设置为false与此处的第三个参数一样,则 XMLHttpRequest 会阻塞: ref.open('POST','x.jsp',false);.

于 2013-10-04T14:57:20.250 回答
1

我认为你的电话open是错误的。第三个参数(布尔值)指示请求是否是异步的。

在这里考虑完整的文档:http: //www.w3schools.com/ajax/ajax_xmlhttprequest_send.asp

ref.open('POST','x.jsp',true);

应该能解决你的问题。

问候

于 2013-10-04T15:01:11.553 回答