2011-08-09 81 views
1

下面是一个例子:为什么不能在IE上使用?

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

它适用于所有浏览器,除了IE浏览器。下面的代码:

<!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中工作。但是如果你把它留在那里,即使它与代码无关,它仍然不起作用。看着头部我得到了406错误。帮助:(

+0

http://develop.davzy.com/contents.html doesnt exist?也许你已经在Firefox中使用了HTML? – papachan

+0

它从不尝试获取该页面。它试图得到http://develop.davzy.com/ajaxtest/contents.html,它是一个406错误,而不是404 –

+0

确定它对我来说工作正常。在IE 9上。 – papachan

回答

0

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

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

这将为所有针对div执行的AJAX操作创建一个ajaxSend回调函数,这些函数将会从引用程序头文件中去除散列标记......我没有时间来测试这个,但理论上它应该可以工作

相关问题