INVALID_STATE_ERR: исключение DOM 11 - PullRequest
0 голосов
/ 22 июля 2011

Хорошо, я создал рабочий ajax-файл javascript, но он генерирует абсурдное число этих исключений 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 Ответ

1 голос
/ 22 июля 2011

Возможно, вы пытаетесь вызвать 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) {

чтобы убедиться, что объект готов, прежде чем получить доступ к состоянию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...