IE предлагает открыть или сохранить результат json с сервера - PullRequest
55 голосов
/ 24 мая 2011

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!" } };

Ответы [ 9 ]

36 голосов
/ 01 июня 2011

Несмотря на то, что якобы это не правильный путь, установка типа содержимого text / html заставила IE корректно справиться с этим для меня:

return Json(result, "text/html");

Работает во всех версиях, которые инструменты F12 предоставляют в IE9.

31 голосов
/ 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

14 голосов
/ 25 мая 2011

Похоже, что этот вопрос может иметь отношение к вам:

Как я могу убедить IE просто отобразить Application json, а не предлагать скачать

Если нет:

Вы пробовали установить ожидаемый тип данных в опциях ajax?т.е. dataType: 'json'

Вы пробовали другие типы контента, такие как 'application / json' или 'text / javascript'

2 голосов
/ 31 августа 2016

К сожалению, это еще одна досадная особенность использования Internet Explorer.

enter image description here

Простое решение - запустить небольшой файл .reg на вашем компьютере.ПК, чтобы сообщить IE автоматически открыть файлы .json, а не настаивать на том, открывать или сохранять его.

Я поместил здесь копию файла, которая вам понадобится:

JIME MIME-тип

Для этого вам понадобятся права администратора.

2 голосов
/ 01 октября 2012

Я изменил тип содержимого на «text / html» вместо «application / json» на стороне сервера, прежде чем возвращать ответ.Описано в блоге, где также были добавлены другие решения:

http://blog.degree.no/2012/09/jquery-json-ie8ie9-treats-response-as-downloadable-file/

2 голосов
/ 24 мая 2011

Вы пытались отправить свой AJAX-запрос методом POST? Вы также можете попытаться установить тип содержимого 'text / x-json' при возврате результата с сервера.

1 голос
/ 24 мая 2011

Выше кода javascript тот, который вы используете в своем веб-приложении? Если это так - я хотел бы указать несколько ошибок в этом: во-первых - у него есть дополнительный знак «{» в определении функции обратного вызова «success» во-вторых - у него нет знака ')' после определения обратного вызова ajax. Действительный код должен выглядеть так:

$.ajax({
        type:'POST',
        data: 'args',
        url: '@Url.Action("PostBack")',
        success: function (data, textStatus, jqXHR) {
                alert(data.message);
            }
    });

попробуйте использовать приведенный выше код - он дал мне предупреждение "Yay" на всех 3 версиях IE (7,8,9).

0 голосов
/ 27 октября 2018

В моем случае IE11 ведет себя таким образом, когда в консоли есть какая-то синтаксическая ошибка JS (не имеет значения, где именно) и dataType: 'json' не имеет никакого эффекта.

0 голосов
/ 09 февраля 2016

Я сталкивался с этим при использовании jQuery FileUpload плагин .

Затем я взглянул на их документацию, точнее на раздел Переговоры о типах контента , и последовал их предложению для Ruby / Rails .

render(json: <some-data>, content_type: request.format)

Что исправило проблему для меня.

Краткое объяснение : для старых версий IE / Opera этот плагин будет использовать iframe с text/plain или text/html типом контента, поэтому, если вы принудительно ответите на json, браузер будет попробуйте скачать его. Использование того же типа контента, что и в запросе, заставит его работать для любого браузера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...