IE提示从服务器打开或保存json结果

iLe*_*ing 56 jquery internet-explorer asp.net-mvc-3

兼容模式下的Internet Explorer以ajax回调方法从服务器获取数据,如果我想保存数据或打开,则会弹出一个对话框.如何摆脱它?

客户说:

$.ajax({
        type:'POST',
        data: $("#UIdlgHolder > form").serialize(),
        url: $("#UIdlgHolder > form").attr("action"),
        success: function (data, textStatus, jqXHR) {
            {
                alert(data.message);
            }
}
Run Code Online (Sandbox Code Playgroud)

服务器答案:

return new JsonResult { Data = new { result = false, message = "Yay!" } };
Run Code Online (Sandbox Code Playgroud)

Its*_*son 36

即使它不是正确的方法,将内容类型设置为text/html让IE正确地处理了这个问题:

return Json(result, "text/html");
Run Code Online (Sandbox Code Playgroud)

适用于F12工具在IE9中为您提供的所有版本.

  • 这不是正确的方法.关于它没有"据说". (9认同)
  • 这是唯一对我有用的东西.我无法控制ajax请求(第三方控件),IE9会*不工作.所以,即使它不是正确的方法,它仍然有效(到目前为止在其他浏览器上没有问题) (2认同)
  • 这是错误的原因是在JSON中有效的尖括号导致浏览器将JSON视为格式错误的HTML (2认同)

Chr*_*ris 32

如果使用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);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,您的控制器都可以继承ExtendedController并简单地调用return Json(model);...

  • 没有修改那些播放得很好的浏览器的响应内容类型(不是<= IE9!)
  • 无需记住Json(data, "text/plain")在各种Ajax操作方法中使用

这适用于json请求,否则将在IE8和IE9中显示"打开或保存"消息,例如由jQuery文件上载生成的消息

  • 该解决方案存在问题.例如,Chrome发布了`*/*`的毯子`AcceptTypes`,这个解决方案没有捕获,因此Chrome最终会收到`text/plain`,这是不正确的. (3认同)

Car*_*ire 14

听起来像这样的问题可能与您有关:

如何说服IE只显示Application json而不是提供下载

如果不:

您是否尝试过设置ajax选项中预期的dataType?即dataType:'json'

您是否尝试过其他内容类型,例如'application/json'或'text/javascript'