INVALID_STATE_ERR:DOM异常11

时间:2011-07-22 03:09:12

标签: javascript dom

好的,我已经创建了一个有效的javascript ajax文件,但它会产生一些荒谬的dom异常。我不确定为什么会这样,因为从我所看到的,我所称的所有元素目前仍然存在。 代码在这里:

window.onload = function(){init();}

function init() {
    ajax = ajaxInit();
    setInterval(function(){ajaxContact(ajax);},2000);
    ajaxContact(ajax);
    ajax.onreadystatechange = function() {update(ajax);}
}

function ajaxInit() {
    if (window.XMLHttpRequest) {
      ajax = new XMLHttpRequest();
    }
    else {
        if (window.ActiveXObject) {
              ajax = new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    if (ajax) {
        document.getElementById("status").innerHTML = "AJAX initialized";
        return ajax;
    }
    else {
        docuement.getElementById("status").innerHTML = "Error: AJAX not available";
        return false;
    }

}

function ajaxContact(ajax) {
    try {
        ajax.open("GET","updateAjax.php?" + "ran=" + Math.random(),true);
        ajax.send();
    }
    catch (err) {
        alert(err.message);
        document.getElementById("status").innerHTML = "Error contacting server";
        document.getElementById("loading").src = "images/redx.png";
    }
}

function update(ajax) {
      if (ajax.readyState==4 && ajax.status==200){
          dataObj = eval('(' + ajax.responseText + ')');
          document.getElementById("status").innerHTML = dataObj.status;
          document.getElementById("frameNumber").innerHTML =
          "Frame:" + dataObj.firstFrame + "/" + dataObj.lastFrame;
          document.getElementById("thumbnail").src = dataObj.imgSrc;
      }
      if (ajax.status==404) {
          document.getElementById("status").innerHTML = "Ajax updater not found";
          document.getElementById("loading").src = "images/redx.png";
      }
}

1 个答案:

答案 0 :(得分:1)

<击> 您可能正在尝试调用open并发送ajax,但如果请求在setInterval每次调用之间的两秒内没有完成,则会引发错误。您需要在每次调用时检查ajax对象是否已经发送或准备好打开(检查ajax.readyState)。

在Chrome中,该行

if (ajax.status==404) {

通过访问ajax.readyState HEADERS_RECEIVED(2),LOADING(3),DONE(4)之前的状态来导致错误。尝试制作

if (ajax.readyState == 4 && ajax.status==404) {

在访问状态之前确保对象已就绪。