Прототип Ajax.Request и Internet Explorer 8 - PullRequest
2 голосов
/ 14 июля 2009

Следующий код должен выполнить запрос AJAX после загрузки страницы, а затем отобразить ответ на этот вызов AJAX во всплывающем окне. Это работает в Firefox, но я понятия не имею, почему это не работает в IE8.

<html>
<head>
    <script type="text/javascript" src="js/prototype.js"></script>
    <script type="text/javascript">
        // Do this stuff when DOM finishes loading.
        document.observe("dom:loaded", function() {
            new Ajax.Request("page.html", {
                onSuccess: function(response) {
                    alert(response.responseText);
                }
            });
        }); 
    </script>
</head>
<body>
</body>
</html>

page.html просто содержит

hello world

Я что-то упускаю из виду или это результат того, что библиотека js-прототипа не полностью совместима с IE8? Я попробовал это с последним стабильным выпуском прототипа (1.6.0.3) и новейшей версией (1.6.1 RC3), но не повезло. Любая помощь будет высоко ценится, спасибо!

Ответы [ 2 ]

2 голосов
/ 11 августа 2010

Просто в дополнение к существующему ответу и просто хочу упомянуть, что IE8 делает какое-то сумасшедшее кэширование, когда вы используете get в своих вызовах Ajax. Мое веб-приложение хорошо работало в FF, но в IE8 некоторые вызовы ajax никогда не выполнялись. Я изменил метод: с 'get' на 'post', и все было хорошо.

method: 'post'

Кроме того, чтобы не допустить смешных действий в IE8 с переменными сеанса, поместите следующие метатеги в заголовки ваших HTML-страниц.

<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">
2 голосов
/ 14 июля 2009

Вы делаете это на веб-сайте или используете файл? Мне удалось заставить ваш код работать на веб-сайте в Visual Studio, но когда я попробовал его из файла, я получил ошибку «Отказано в доступе». Я подозреваю, что он не может выполнить запрос Ajax к файлу в локальной файловой системе из-за ограничений безопасности в IE8.

Вот точный код, который я использовал на своей странице Default.aspx для загрузки файла page.htm. Обратите внимание, что я изменил метод - поскольку это не форма - и добавил обратные вызовы для ошибок и исключений. Обратный вызов исключений был вызван для меня локальным файлом. Как я уже сказал, он работает нормально при доступе к странице на том же веб-сайте.

<script type="text/javascript">
    document.observe( 'dom:loaded', function() {
        new Ajax.Request("page.htm", {
            method: 'get',
            onSuccess: function(response) {
                alert(response.responseText);
            },
            onFailure: function(response) {
                alert(response);
            },
            onException: function(request,error) {
                alert(error.message);
            }
        }); 
    });
</script>
...