Асинхронный Ajax в IE - ошибка Данные, необходимые для завершения этой операции, еще не доступны

У меня есть 100% действующая модель Ajax, написанная на Javascript, с несколькими входными данными, которые я использую: метод Get или Post, с какой страницей связываться, какую строку отправлять на эту страницу и с каким элементом на моей собственной странице я мог бы возиться, когда Я получаю свой ответ. Проблема в том, что если я настрою запрос на асинхронный (следовательно, Ajax), IE вернет ошибку «Данные, необходимые для завершения этой операции, еще не доступны» в событии onreadystatechange, где все, что я делаю, это проверяю, является ли состояние готовности 4 и статус 200. Ошибка не появляется в Firefox или Chrome, как я ожидал, поскольку Ajax является асинхронным.

Вот фрагмент метода Post

xmlhttp.open("POST", commPage, true);
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        j = xmlhttp.responseText;
        i.innerHTML = j;
    }
}
xmlhttp.send(str);

Изменить: я должен указать, что в IE я использую ActiveX Control -> Msxml2.XMLHTTP или Microsoft.XMLHTTP или в зависимости от того, что первым возвращает true.


person Supernovah    schedule 19.12.2008    source источник


Ответы (3)


Хо хамм

Вне функции onreadystatechange у меня был вызов responsetext, чтобы проверить, существует ли он еще, но, по-видимому, вы не можете этого сделать, если он еще не существует, поэтому мне просто пришлось реструктурировать некоторые вещи. Все в порядке, но это был скрипт, который вызвал проблему

ajaxRequest(){
    [...]
}
if(xmlhttp.responseText){
    myFunc();
}
person Supernovah    schedule 19.12.2008

Однажды у меня была эта ошибка, и я решил ее, настроив тайм-ауты! может быть, вы могли бы попробовать то же самое!

Ваше здоровье

person André Pedroso    schedule 12.04.2011
comment
Как вы вычисляли тайм-ауты? можно поконкретнее пожалуйста и привести примеры? Спасибо ! - person liorafar; 20.03.2013
comment
вот пример: http://stackoverflow.com/questions/1523686/timeout-xmlhttprequest - person André Pedroso; 28.05.2013

Не уверен, что это ваш случай, но я три часа боролся с этой ошибкой, пока не нашел проблему. Класс веб-сервиса не был украшен атрибутом ScriptService, позволяющим вызывать методы из клиентского скрипта! Я бы не стал винить IE, потому что IE просто строго относится к ошибкам и сообщает обо всем, что другие браузеры игнорируют. IE хорош для отладки. Надеюсь это поможет. Ну... возможно, не вы, так как ваш пост уже очень старый.

person David    schedule 06.10.2009