Подтвердить что ты не робот

IE9 JSON Data "вы хотите открыть или сохранить этот файл"

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

Кто-нибудь еще сталкивается с этой проблемой? Вот моментальный снимок. enter image description here

4b9b3361

Ответ 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".