以下是一个例子:
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错误。帮助:(
答案 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标题中删除哈希标记...我没有时间对此进行测试,但理论上它应该可以工作。