IE8 рассматривает json-ответ как файл и пытается его загрузить

Я использую IE8, и я отправляю запрос ajax на адрес url, который отправляет ответ в виде json. Код jquery для настройки ajax приведен ниже:

$(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. Это происходит, когда я заменяю json на jsonp в dataType

Но он всегда входит в метод обратного вызова ошибки.

Мое тело json состоит из строки с тегами html.

Любая идея, почему это происходит?

Спасибо

Ответы

Ответ 1

У меня была такая же проблема и я исправил ее, установив Content-type = "text/html" в заголовок ответа для всех запросов IE (а не "application/json" )

Я также написал сообщение в блоге об этом с дополнительной информацией: http://blog.degree.no/2012/09/jquery-json-ie8ie9-treats-response-as-downloadable-file/

Ответ 2

В зависимости от того, что отправляет json, вы должны отправить его как текст типа mime. Поэтому в рельсах мне пришлось это сделать.

    render :text => my_array.to_json

Вместо

    render :json => my_array

Ответ 3

Я изменил 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/[email protected]&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 имеет проблемы с дополнительной запятой в массиве результатов. Проверьте это сообщение для ответа.