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