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

时间:2012-01-17 10:12:04

标签: jquery internet-explorer-8 download

我正在使用IE8,我正在向url发送ajax请求,该请求以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标记的字符串。

知道为什么会这样吗?

由于

3 个答案:

答案 0 :(得分:10)

我遇到了同样的问题并通过在所有IE请求的响应标头中设置Content-type =“text / html”来修复它(而不是“application / json”)

我还写了一篇关于它的博客文章,其中包含更多信息:http://blog.degree.no/2012/09/jquery-json-ie8ie9-treats-response-as-downloadable-file/

答案 1 :(得分:3)

根据发送json的内容,您必须将其作为mime类型文本发送。 所以在rails中我必须这样做。

    render :text => my_array.to_json

而不是

    render :json => my_array

答案 2 :(得分: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>

有一个已知的问题,详见本answer,其中IE8在结果数组中有额外的逗号问题。检查响应警报的内容。