1

这是一个例子:

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 调用就起作用了。

显然我打算使用标签导航,但奇怪的是如果你从 url 中删除 /#!/contents 它将在 IE 中工作。但是如果你把它留在那里,即使它与代码没有任何关系,它仍然不起作用。查看标题我收到 406 错误。帮助 :(

4

1 回答 1

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 标头中去除哈希标记...我没有时间对此进行测试,但理论上它应该可以工作。

于 2011-08-09T22:44:31.180 回答