Internet Explorer 8不会触发AJAX调用

时间:2012-02-13 22:34:38

标签: jquery ruby-on-rails ajax internet-explorer

我一直在努力解决这个问题,而且类似问题的建议根本没有帮助。我试图在我的RoR应用程序中对$(document).ready进行AJAX调用,并从简单的$ .get()开始,如

<script type="text/javascript">
$(document).ready(function(){
    $.get('/render_single_stats/<%=@user_params.id%>/');
});
</script>

适用于Opera,Chrome和Firefox,但不适用于IE。 在搜索了SO答案之后,我尝试了

$(document).ready(function(){
    var timestamp = new Date();
    $.ajax({type : 'POST', url : '/render_single_stats/<%=@user_params.id%>' + '&timestamp=' + timestamp.getTime(), cache : false, contentType : 'application/javascript'});

});
</script>

这个电话也没有运气。

我很确定jQuery库已加载,因为其他函数正在运行。我正在使用最新的'jquery-rails'宝石。

我也试图强制使用IE7兼容模式,但没有运气。

所以在尝试了大部分建议之后,我错过了什么或做错了吗?

编辑:

结果出现了与我的jQuery版本有关的问题(从1.5.2切换到1.7.1),然后我不得不将我的html更改为对IE有效。在实现这一点之前,我作为原始html对服务器响应进行了逐步检查,然后似乎jQuery.html()无效,这导致了HTML的验证。

该死的IE :(

非常感谢你们的回答,但是我无法将这些答案标记为正确,因为问题正存在于其他地方。

2 个答案:

答案 0 :(得分:0)

我遇到了与IE类似的问题,问题是IE正在“捕捉”ajax调用的响应,因此它只执行一次ajax调用,然后所有其他时间将使用第一个原始响应。 您可以通过关闭和打开浏览器来测试此理论。 修复程序基本上告诉IE不要捕获响应,你可以通过在ajax响应中添加以下标题来实现:

response['Cache-Control']='no-store, no-cache, must-revalidate, post-check=0, pre-check=0'
response['Pragma']='no-cache'
response['Expires']='Sun, 19 Nov 1978 05:00:00 GMT'

答案 1 :(得分:0)

由于您正在检索RJS模板,请尝试尝试:

$.getScript('/render_single_stats/<%=@user_params.id%>/');

根据jQuery文档,

  

$.get()使用HTTP GET请求从服务器加载数据。

     

$.getScript()使用GET HTTP请求从服务器加载JS文件,然后执行它。