Javascript AJAX加载程序GIF,而异步POST请求不';我不在IE工作

Javascript AJAX加载程序GIF,而异步POST请求不';我不在IE工作,javascript,html,ajax,Javascript,Html,Ajax,我试图在执行异步POST请求时显示AJAX加载程序gif。不幸的是,这在Interet Explorer中不起作用!会显示Gif,但请求过程似乎会相应停止。更改的Web内容将不会显示。在FF,歌剧院,狩猎,一切都很好!有什么想法吗 http_request.onreadystatechange = function() { if (http_request.readyState < 4) { var waitingPageBody = '< img src="/i

我试图在执行异步POST请求时显示AJAX加载程序gif。不幸的是,这在Interet Explorer中不起作用!会显示Gif,但请求过程似乎会相应停止。更改的Web内容将不会显示。在FF,歌剧院,狩猎,一切都很好!有什么想法吗

http_request.onreadystatechange = function() 
 {
   if (http_request.readyState < 4)
   {
  var waitingPageBody = '< img src="/img/ajaxloader.gif" alt="request in progress..."/>';
  document.body.innerHTML = waitingPageBody;
   }
   else //if (http_request.readyState == 4)
   {
  if (http_request.status == 200)
  {
    document.body.innerHTML = http_request.responseText;

  }//end of if (http_request.status == 200)
  else
  {//other http statuses
    alert("There was a problem");
  }
   } //end of else if http_request.readyState == 4
 }

...
http_request.onreadystatechange=function()
{
if(http_request.readyState<4)
{
var waitingPageBody='”;
document.body.innerHTML=waitingPageBody;
}
else//if(http_request.readyState==4)
{
如果(http_request.status==200)
{
document.body.innerHTML=http_request.responseText;
}//if结束(http_request.status==200)
其他的
{//其他http状态
警惕(“出现问题”);
}
}//如果http_request.readyState==4,则结束else
}
...

您已经向我们展示了事件处理代码,但是您正在调用
open()
send()

您的事件处理代码似乎在FF3.5、IE6和IE8中工作:
(可通过以下方式编辑:)

完整资料来源:

<!DOCTYPE html>
<html>
<head>
  <title>Sandbox</title>
  <script>
    function load() {
      var http_request = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
      http_request.open('GET', 'http://jsbin.com/blank.html', true);

      http_request.onreadystatechange = function() {
        if (http_request.readyState < 4) {
          var waitingPageBody = 'request in progress...';
          document.body.innerHTML = waitingPageBody;
        }
        else {
          //if (http_request.readyState == 4)
          if (http_request.status == 200) {
            document.body.innerHTML = '<pre>' + entity(http_request.responseText) + '</pre>';
          }//end of if (http_request.status == 200)
          else {
            //other http statuses
            alert("There was a problem");
          }
        } //end of else if http_request.readyState == 4
      };

      http_request.send();
    }

    function entity(str) {
      return str.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
    };
  </script>
</head>
<body onload="load();">
</body>
</html>
'; }//if结束(http_request.status==200) 否则{ //其他http状态 警惕(“出现问题”); } }, 0); } 功能实体(str){ 返回str.replace(//&/g,“&;”)。replace(//g,”); }
您已经向我们展示了事件处理代码,但是您正在调用
open()
send()

您的事件处理代码似乎在FF3.5、IE6和IE8中工作:
(可通过以下方式编辑:)

完整资料来源:

<!DOCTYPE html>
<html>
<head>
  <title>Sandbox</title>
  <script>
    function load() {
      var http_request = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
      http_request.open('GET', 'http://jsbin.com/blank.html', true);

      http_request.onreadystatechange = function() {
        if (http_request.readyState < 4) {
          var waitingPageBody = 'request in progress...';
          document.body.innerHTML = waitingPageBody;
        }
        else {
          //if (http_request.readyState == 4)
          if (http_request.status == 200) {
            document.body.innerHTML = '<pre>' + entity(http_request.responseText) + '</pre>';
          }//end of if (http_request.status == 200)
          else {
            //other http statuses
            alert("There was a problem");
          }
        } //end of else if http_request.readyState == 4
      };

      http_request.send();
    }

    function entity(str) {
      return str.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
    };
  </script>
</head>
<body onload="load();">
</body>
</html>
'; }//if结束(http_request.status==200) 否则{ //其他http状态 警惕(“出现问题”); } }, 0); } 功能实体(str){ 返回str.replace(//&/g,“&;”)。replace(//g,”); }
窗口将冻结,因为请求是同步的。每当javascript代码执行时,浏览器就会冻结,运行同步请求相当于在浏览器等待响应的整个时间内运行javascript代码。

窗口将冻结,因为请求是同步的。每当javascript代码执行时,浏览器就会冻结,运行同步请求相当于在浏览器等待响应的整个过程中运行javascript代码。

@dforce:此处无答案,但您可能希望尝试使用JQuery之类的框架来处理http\U请求的实质,同时关注业务逻辑。不幸的是,我无法在我的特殊上下文中为您提供这些库。@dforce:这里没有答案,但是,您可能希望在关注业务逻辑的同时,尝试使用JQuery之类的框架来处理http_请求的本质。不幸的是,我无法在我的特殊上下文中使用这些库。当然。这是我的部分:http_request.open(“POST”,url,false)//异步http_请求.setRequestHeader(“连接”,“关闭”);http_request.send(参数);对于异步的东西,这里有'false'。那对我来说就行了。但这不是我锁定的目的…因为您使用的是同步请求,我已使用正确的代码编辑了答案。我将尝试此。。。但是我们如何防止窗口冻结问题呢?我还希望http_request.open也是如此。如果出于某种原因,您真的不想使用异步请求,那么您必须确保您的目标受众能够快速访问您的服务器,并且您的服务器不会花费太长时间来处理请求。确定。这是我的部分:http_request.open(“POST”,url,false)//异步http_请求.setRequestHeader(“连接”,“关闭”);http_request.send(参数);对于异步的东西,这里有'false'。那对我来说就行了。但这不是我锁定的目的…因为您使用的是同步请求,我已使用正确的代码编辑了答案。我将尝试此。。。但是我们如何防止窗口冻结问题呢?我还希望http_request.open也是如此。如果出于某种原因,您真的不想使用异步请求,那么您必须确保您的目标受众能够快速访问您的服务器,并且您的服务器不会花费太长时间来处理请求。+1只需发出异步请求,所以浏览器不会停止,这就是异步请求的用途,这就是AJAX+1中的A只是发出异步请求,所以浏览器不会停止,这就是异步请求的用途,这就是AJAX中的A