IE9-ajax请求期间未显示微调器[已解决-不要使用Msxml2.XMLHTTP.4.0]

IE9-ajax请求期间未显示微调器[已解决-不要使用Msxml2.XMLHTTP.4.0],ajax,internet-explorer-9,Ajax,Internet Explorer 9,我的代码如下: function loadContent() { if(loading) { return false; } showSpinner(); var xhr = createXHR(); xhr.open("GET", "http://localhost/testing.php"); xhr.onreadystatechange = function() { if(xhr.readyState == 4) {

我的代码如下:

  function loadContent() {

    if(loading) { return false; }
    showSpinner();

    var xhr = createXHR();
    xhr.open("GET", "http://localhost/testing.php");
    xhr.onreadystatechange = function() {
      if(xhr.readyState == 4) {
        hideSpinner();
        var resp = xhr.responseText;
        document.getElementById("content").innerHTML = resp;
      }
    }
    xhr.send(null);

  }

  function showSpinner() {
    document.getElementById("loadingIcon").style.display = 'inline';
    loading = true;
  }

  function hideSpinner() {
    document.getElementById("loadingIcon").style.display = 'none';
    loading = false;
  }
这在Firefox和Chrome中可以正常工作,但在IE9中不会显示微调器

我注释掉了hideSpinner()函数的第一行,发现IE9确实显示微调器,但只有在AJAX请求返回结果之后才显示。 我在这里做了什么不正常的事吗

[edit]算出了——createXHR()方法的原始代码如下:

  function createXHR() {
    try { return new ActiveXObject("Msxml2.XMLHTTP.5.0"); } catch (e) {}
    try { return new ActiveXObject("Msxml2.XMLHTTP.4.0"); } catch (e) {}
    try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); } catch (e) {}
    try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
    try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
    try { return new XMLHttpRequest(); } catch(e) {}
    return null;
  }

将最后一行“try”移到顶部可以解决问题。

不要依赖全局变量来完成此操作。您根本不需要
加载
变量

function loadContent() {
  var spinner = document.getElementById("loadingIcon");
  var xhr = createXHR();

  spinner.style.display = 'inline';

  xhr.onreadystatechange = function () {
    if (xhr.readyState == 4) {
      if (xhr.status == 200) {
        document.getElementById("content").innerHTML = xhr.responseText;
      }
      spinner.style.display = 'none';
    }
  }

  xhr.open("GET", "http://localhost/testing.php");
  xhr.send(null);
}

隐马尔可夫模型。。。
加载
变量的目的是防止触发多个请求,有更好的方法吗?另外,我按照您的建议更改了代码,但仍观察到IE9中的相同行为,如顶部所述post@joshivir:啊,我知道变量的用法了。IE中是否有任何错误消息?另外,您是否尝试过使用
“块”
而不是
“内联”
?换句话说,如果单独发出“style”命令,微调器是否会显示?在IE控制台中未发现任何脚本错误。使用
“block”
会导致微调器显示在错误的位置:-)不确定最后一个问题是什么意思…我明白了--似乎我使用了一种不推荐的方法来创建AJAX请求,编辑带有详细信息的top post。非常感谢您抽出时间:-)