IE8将JSON响应视为文件并尝试下载

15

我正在使用IE8,向其中一个URL发送ajax请求,该URL将以JSON格式返回响应。下面是用于ajax设置的jQuery代码:

$(document).ready(function(){
  $.ajax({
    url: url_string,
    dataType: "json",
    success: function(response){
      alert('all is well');
    },
    error: function(request, status, error){
      alert(request);
      alert(status);
      alert(error);
    }
  });
});

我确信服务器正在发送JSON响应,但IE8将其视为文件并弹出下载框。但是在FF和Chrome中,同样的过程运行良好。即使我在dataType中将json替换为jsonp,情况仍然如此。

但它总是进入错误回调方法。

我的json响应正文包含带有html标记的字符串。

有任何想法为什么会发生这种情况吗?

谢谢


请问您能否提供从服务器返回的HTTP响应头?请使用Fiddler(http://www.fiddler2.com/fiddler2/)进行捕获。如果请求的是正在开发中的`localhost`网站,则在运行时将主机名更改为使用您的计算机名称或ipv4.fiddler。 - Andras Zoltan
哦,从FF复制粘贴响应头 响应头 日期:2012年1月17日10:21:48 GMT 服务器:Apache/2.2.12(Ubuntu) X-Powered-By PHP/5.2.10-2ubuntu6.10 访问控制允许Orig... * 内容长度6507 内容类型application/json; charset=utf-8 X-Cache MISS from localhost X-Cache-Lookup MISS from localhost:3128 通过1.1 localhost:3128(鱿鱼/2.7.STABLE9) 连接保持活动状态 - Gagan
这是我从Fiddler获得的响应头: HTTP/1.0 200 OK 日期:2012年1月17日 星期二 11:45:41 GMT 服务器:Apache/2.2.12 (Ubuntu) 由PHP/5.2.10-2ubuntu6.10提供支持 允许跨域访问:* 内容长度:0 内容类型:application/json; charset=utf-8 缓存状态:MISS from localhost 缓存查找状态:MISS from localhost:3128 通过:1.1 localhost:3128 (squid/2.7.STABLE9) 连接:保持活动状态 - Gagan
这不是特定于jQuery的问题,因此它是此问题的重复。 - Kenny Evitt
3个回答

10

+1 感谢。text/plain 也可以使用。看起来在 IE8 和 9 中是相同的。IE10 似乎理解 application/json - Gray
这会在我的程序中触发重定向。 - Philll_t

3

根据发送json的工具不同,你需要将其发送为mime类型文本。在Rails中,我需要这样做。

    render :text => my_array.to_json

替代

    render :json => my_array

0

我修改了你代码的URL,并使用了最新版本的JQuery,在IE8中运行良好。

<html> 
<head>   
  <script src="http://code.jquery.com/jquery-latest.js"></script> 
</head> 
<body> 
<script>  
    $(document).ready(function() {            
    $.ajax({                      
        url: "http://api.flickr.com/services/feeds/groups_pool.gne?id=807213@N20&lang=en-us&format=json&jsoncallback=?",
                    dataType: "json",                      
        success: function(response){                        
            alert('all is well');                      
            alert($.param(response));                 
        },                      
        error: function(request, status, error){                            
            alert(request);                            
            alert(status);                            
            alert(error);
        }          
});  
}); 
</script> 
</body>
</html>

这里有一个已知问题详细说明在此答案中,IE8会在结果数组中出现额外逗号的情况下产生问题。请检查响应警报的内容。


1
谢谢您的回答,但这并没有解决我的问题。我的问题是,为什么IE8将JSON响应下载为文件。响应头的Content-Length为0,因为该响应被视为文件。 - Gagan
是的,我在你回答后添加的评论中看到了这一点。 - Nicholas Murray

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接