AJAX запускает readyState 4 несколько раз в IE - PullRequest
0 голосов
/ 16 июня 2011

У меня странная проблема, когда IE8 запускает readyState 4 три или четыре раза по запросу ajax. Это случается часто, но не всегда, и только для нескольких конкретных ссылок - остальные мои ссылки ajax в порядке. Мой объект создания и обработчик onreadystatechange являются основными, то есть.

function ajaxPost(params) {

    try {
        // Firefox, Opera 8.0+, Safari
        xmlHttp = new XMLHttpRequest();
    } catch (e) {
        // Internet Explorer
        try {
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {
                alert('Unsupported Browser');
            }
        }
    }

    xmlHttp.onreadystatechange = function() {
        if (xmlHttp.readyState == 4) {
            // Do something
        }
    }

    xmlHttp.open("POST", path_to_script);
    xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
    xmlHttp.setRequestHeader("Cache-Control", "must-revalidate");
    xmlHttp.send(params);
}

Не уверен, что это актуально - но в тех местах, где возникает проблема, пользователь уже перемещался по интерфейсу ajax. Они щелкнули несколько других ссылок ajax без перезагрузки страницы - каждая ссылка использует новый объект xmlHttpRequest с тем же именем глобальной переменной (xmlHttp), но каждый запрос ajax завершается, прежде чем может быть выполнен другой. Нужно ли делать какую-либо «очистку» или что-то для IE8? Такого никогда не было, используя Safari, Firefox, Chrome или любой другой браузер.

Любое понимание будет высоко ценится.

Спасибо, Брайан

Ответы [ 2 ]

1 голос
/ 16 июня 2011

Поскольку ваш объект xmlHttp является глобальным, IE8 может назначать новый onreadystatechange каждый раз, когда вы вызываете ajaxPost вместо его замены.

Это может объяснить ошибочное поведение, поскольку оно зависит от количества вызовов на ajaxPost.

0 голосов
/ 12 ноября 2012

Мне интересно, если у вас такая же проблема, как у меня .

Возможно ли, что функции onreadystatechange выполняются не сразу?

Состояние готовности изменяется 3 раза (от 1 до 2, от 2 до 3 и от 3 до 4), ноесли выполнение задерживается, когда функции действительно выполняются, они увидят текущее состояние готовности 4. Так как есть 3 события readychange, и все они видят readystate = 4, они все выполняются.

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