为什么这不适用于IE?

时间:2011-08-09 22:09:39

标签: ajax internet-explorer hashtag

以下是一个例子:

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>

contents.html的内容是     如果你还在test.html上,那么这个AJAX调用就可以了。

显然我打算使用hashtag导航,但是如果你从IE中删除它将在IE中工作的url /#!/内容是多么奇怪。但是,如果你把它留在那里,即使它没有与代码有关,它仍然无法正常工作。看着标题我得到406错误。帮助:(

1 个答案:

答案 0 :(得分:0)

根据我上面的评论:问题似乎是IE9在创建“Referer”标题时会保留URL的“#!/ contents”部分。 jQuery AJAX包装浏览器的XMLHTTPRequest对象的jqXHR对象公开了一个setRequestHeader方法,该方法可能允许您更改Referer标头,以便它不会导致406错误。如果您不关心准确的Referer标题,可以尝试将以下代码添加到脚本中:

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

这将为所有针对div执行的AJAX操作创建ajaxSend回调,这些操作将从Referer标题中删除哈希标记...我没有时间对此进行测试,但理论上它应该可以工作。