IE8 обрабатывает ответ json как файл и пытается его скачать - PullRequest
15 голосов
/ 17 января 2012

Я использую 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 in dataType

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

Тело моего ответа json также содержит строку с тегами html .

Есть идеи, почему это происходит?

Спасибо

Ответы [ 3 ]

10 голосов
/ 27 сентября 2012

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

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

3 голосов
/ 18 июля 2012

В зависимости от того, что отправляет JSON, вы должны отправить его в виде текста MIME.Так что в рельсах я должен был сделать это.

    render :text => my_array.to_json

Вместо

    render :json => my_array
0 голосов
/ 17 января 2012

Я изменил 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 имеет проблемы с лишней запятой в массиве результатов.Проверьте содержание ответного оповещения для этого.

...