IE9 JSON Data "Вы хотите открыть или сохранить этот файл" - PullRequest
38 голосов
/ 22 марта 2011

Началось тестирование моих приложений jQuery с IE9.Похоже, у меня могут быть некоторые проблемы здесь.Я заметил, что когда я возвращаю данные JSON обратно в методы Javascript, я всегда получаю приглашение, которое говорит: «Хотите открыть или сохранить этот файл?»и предоставляет мне 3 кнопки: Открыть, Сохранить и Отменить.Конечно, мой javascript выполняет действия, основанные на значениях, установленных в объекте JSON, но, поскольку IE9 не передает его в сценарий, я не могу выполнить последующее действие с этого момента.

Кто-либо еще сталкиваетсяЭта проблема?Вот снимок. enter image description here

Ответы [ 5 ]

21 голосов
/ 08 мая 2012

Если кто-то использует 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);
}

Это устранило проблему для меня!

13 голосов
/ 09 апреля 2013

(Ответ, первоначально отправленный для этот вопрос .)

При использовании MVC один из способов справиться с этим - реализовать базовый контроллер, в котором вы переопределяете (скрываете) метод Json (объект) следующим образом:

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!) </li>
  • без необходимости использовать Json(data, "text/plain") в различных методах действий Ajax

Это работает с запросами json, которые в противном случае отображали бы сообщение «Открыть или сохранить» в IE8 и IE9, например, сделанные Загрузка файла jQuery

6 голосов
/ 07 сентября 2012

Я также столкнулся с этой проблемой вчера с 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's body content that received response.
$.each($.parseJSON(result.html()), function (i, item)
{
  console.log(item.Url);
});
3 голосов
/ 01 марта 2013

В моем случае, когда contentType в заголовке ответа «application / json; charset = UTF-8», IE 9 показывает, что Prompt.Но изменив значение на «text / html», приглашение не отображается, хотя все браузеры выдры подходят для «application / json; charset = UTF-8».

2 голосов
/ 30 марта 2011

На самом деле, вы были правы @EricLaw. После установки типа контента в результате Json, все заработало. Мне пришлось добавить следующие строки:

 result.ContentEncoding = System.Text.Encoding.UTF8; 
 result.ContentType = "application/json; charset=UTF-8
...