Т. е. предложит открыть или сохранить результат в формате 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!" } };
8 53

8 ответов:

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

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

Если нет:

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

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

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

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

работает во всех версиях, которые F12 tools дает вам в IE9.

при использовании 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); ...

  • без изменения типа контента ответа для тех браузеров, которые играют хорошо (не
  • без необходимости помнить, чтобы использовать Json(data, "text/plain") в различных действиях Ajax методы

это работает с запросами json, которые в противном случае отображали бы сообщение "открыть или сохранить" в IE8 & IE9, например, сделанные jQuery File Upload

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

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

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

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

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

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

к сожалению, это просто еще одна раздражающая причуда использования Internet Explorer.

enter image description here

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

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

JSON mime type

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

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

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

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

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

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