IE предлагает открыть или сохранить результат json с сервера
Internet Explorer в режиме совместимости получает данные с сервера в методе обратного вызова ajax и всплывает диалоговое окно, если я хочу сохранить данные или открыть. Как избавиться от этого?
клиент говорит:
$.ajax({
type:'POST',
data: $("#UIdlgHolder > form").serialize(),
url: $("#UIdlgHolder > form").attr("action"),
success: function (data, textStatus, jqXHR) {
{
alert(data.message);
}
}
сервер отвечает:
return new JsonResult { Data = new { result = false, message = "Yay!" } };
Ответы
Ответ 1
Похоже, что этот вопрос SO может иметь отношение к вам:
Как я могу убедить IE просто отображать приложение json, а не предлагать для загрузки
Если нет:
Вы пытались установить значение dataType в параметрах ajax? т.е. dataType: 'json'
Пробовали ли вы другие типы контента, такие как "application/json" или "text/javascript"
Ответ 2
Несмотря на то, что это не предположительно правильный способ, установка типа содержимого в text/html сделала IE для этого правильно:
return Json(result, "text/html");
Работает во всех версиях, которые инструменты F12 предоставляют вам в IE9.
Ответ 3
При использовании MVC одним из способов обработки этого является реализация базового контроллера, в котором вы переопределяете (скрываете) метод Json (object) следующим образом:
public class ExtendedController : Controller
{
protected new JsonResult Json(object data)
{
if (!Request.AcceptTypes.Contains("application/json"))
return base.Json(data, "text/plain");
else
return base.Json(data);
}
}
Теперь ваши контроллеры могут наследовать ExtendedController и просто вызвать return Json(model);
...
- без изменения типа содержимого ответа для тех браузеров, которые хорошо играют (не <= IE9!)
- не задумываясь использовать
Json(data, "text/plain")
в ваших различных методах действий Ajax
Это работает с запросами json, которые в противном случае отображали сообщение "Открыть или Сохранить" в IE8 и IE9, например, созданные Загрузка файла jQuery
Ответ 4
Вы пытались отправить запрос ajax с помощью метода POST?
Вы также можете попытаться установить тип содержимого на "text/x-json", возвращая результат с сервера.
Ответ 5
Я изменил тип содержимого на "text/html" вместо серверной части "application/json" перед возвратом ответа. Описал его в сообщении в блоге, где также были добавлены другие решения:
http://blog.degree.no/2012/09/jquery-json-ie8ie9-treats-response-as-downloadable-file/
Ответ 6
Над кодом javascript находится тот, который вы используете в своем веб-приложении?
Если это так - я хотел бы указать несколько ошибок в нем:
во-первых - он имеет дополнительный признак "{" в определении функции обратного вызова "success"
во-вторых - без знака ") после определения обратного вызова ajax.
Действительный код должен выглядеть так:
$.ajax({
type:'POST',
data: 'args',
url: '@Url.Action("PostBack")',
success: function (data, textStatus, jqXHR) {
alert(data.message);
}
});
попробуйте использовать вышеприведенный код - он дал мне предупреждение "Yay" для всех трех версий IE (7,8,9).
Ответ 7
Я столкнулся с этим при использовании jQuery FileUpload plugin.
Затем я просмотрел их документацию, наиболее точно в разделе Консолидация типов контента и последовал их предложению для Ruby/Рельсы.
render(json: <some-data>, content_type: request.format)
Что исправило проблему для меня.
Быстрое пояснение. Для старых версий IE/Opera этот плагин будет использовать iframe с типом содержимого text/plain
или text/html
, поэтому, если вы принудительно откликнете на json
, браузер попробует загрузить его. Использование того же типа содержимого, что и в запросе, сделает его работу для любого браузера.
Ответ 8
К сожалению, это еще одна неприятная причуда использования Internet Explorer.
![введите описание изображения здесь]()
Простое решение состоит в том, чтобы запустить небольшой файл .reg на вашем ПК, чтобы IE мог автоматически открывать файлы .json, а не называть, открывать/сохранять его.
Я поставил копию файла, который вам понадобится здесь:
тип Mime JSON
Для этого вам понадобятся права администратора.