Почему это не работает на IE? - PullRequest
1 голос
/ 10 августа 2011

Вот пример:

http://develop.davzy.com/ajaxtest/#!/contents

Работает в любом браузере, кроме Internet Explorer.Вот код:

<!doctype html>
<html>
    <head>
        <script type="text/javascript" src="http://code.jquery.com/jquery-latest.pack.js"></script>
        <script>
            $(document).ready(function(){
                    $('div').load('contents.html');
            });
        </script>
    </head>
    <body>
        <div>This message will change if the call is made correctly.</div>
    </body>
</html>

Содержимое content.html: если вы все еще используете test.html, то этот вызов AJAX сработал.Что странно, если вы удалите содержимое / #! / из URL, которое БУДЕТ работать в IE.Но если вы оставите его там, хотя он НИЧЕГО не имеет отношения к коду, он все равно не будет работать.Глядя на заголовки, я получаю 406 ошибок.Помощь: (

1 Ответ

0 голосов
/ 10 августа 2011

На мой комментарий выше: похоже, проблема в том, что IE9 сохраняет часть «#! / Contents» URL при создании заголовка «Referer».Объект jqXHR, который jQuery AJAX оборачивает вокруг объекта браузера XMLHTTPRequest, предоставляет метод setRequestHeader, который может позволить изменить заголовок Referer, чтобы он не вызывал ошибку 406.Вы можете попробовать добавить следующий код в ваш скрипт, если вам не нужен точный заголовок Referer:

$('div').ajaxSend(function(evt,jqXHR) {
  jqXHR.setRequestHeader(jqXHR.getResponseHeader("Referer").replace(/#/g,''));
});

Это создаст обратный вызов ajaxSend для всех операций AJAX, выполняемых с div, которые уберут хеш-меткииз заголовка Referer ... У меня не было времени проверить это, но теоретически это должно сработать.

...