IE9 JSON Data "вы хотите открыть или сохранить этот файл"
Началось тестирование моих приложений jQuery с помощью IE9. Похоже, у меня могут быть какие-то проблемы.
Я заметил, что когда я возвращаю данные JSON обратно в методы Javascript, я всегда получаю эту подсказку, которая гласит: "Вы хотите открыть или сохранить этот файл?" и предоставляет мне 3 кнопки: Открыть, Сохранить и Отменить. Конечно, мой javascript предпринимает действия на основе значений, установленных в объекте JSON, но поскольку IE9 не передает его в script, я не могу выполнить последующее действие оттуда.
Кто-нибудь еще сталкивается с этой проблемой? Вот моментальный снимок. ![enter image description here]()
Ответы
Ответ 1
Собственно, вы были правы @EricLaw. После настройки типа контента в результате Json это сработало.
Мне пришлось добавить следующие строки:
result.ContentEncoding = System.Text.Encoding.UTF8;
result.ContentType = "application/json; charset=UTF-8
Ответ 2
Если кто-то использует ASP.net MVC и пытается исправить эту проблему, я использовал следующие встроенные методы в MVC framework. Просто обновите содержимое Тип и кодировку на JsonResult.
public ActionResult Index(int id)
{
// Fetch some data
var someData = GetSomeData();
// Return and update content type and encoding
return Json(someData, "text/html", System.Text.Encoding.UTF8,
JsonRequestBehavior.AllowGet);
}
Это исправило проблему для меня!
Ответ 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
Я также столкнулся с этой проблемой вчера с помощью WebAPI, который вернул список URL-адресов (асинхронно загруженных файлов).
Просто настройте тип содержимого на "text/html" вместо стандартного "application/json; charset = UTF-8" служб WebAPI. Я получил ответ как строку JSON, а затем использовал $.parseJSON, чтобы преобразовать его в объект JSON.
public async Task<HttpResponseMessage> Upload()
{
// ...
var response = Request.CreateResponse(HttpStatusCode.OK, files);
response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
return response;
}
// result is an iframe body content that received response.
$.each($.parseJSON(result.html()), function (i, item)
{
console.log(item.Url);
});
Ответ 5
В моем случае, когда contentType в заголовке ответа является "application/json; charset = UTF-8", IE 9 показывает "Запрос". Но изменилось на "text/html", тогда приглашение не отобразилось, хотя все браузеры otter в порядке с "application/json; charset = UTF-8".