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

时间:2011-05-24 17:23:45

标签: internet-explorer asp.net-mvc-3 jquery

兼容模式下的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 个答案:

答案 0 :(得分:36)

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

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

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

答案 1 :(得分:31)

如果使用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!)
  • ,无需记住在各种Ajax操作方法中使用Json(data, "text/plain")

这适用于json请求,否则将在IE8&中显示“打开或保存”消息。 IE9,例如由jQuery File Upload

制作的IE9

答案 2 :(得分:14)

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

How can I convince IE to simply display Application json rather than offer to download

如果不是:

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

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

答案 3 :(得分:2)

您是否尝试过使用POST方法发送ajax请求? 您还可以尝试将内容类型设置为“text / x-json”,同时从服务器返回结果。

答案 4 :(得分:2)

在返回响应之前,我将content-type更改为“text / html”而不是“application / json”服务器端。在博客文章中描述了它,其中还添加了其他解决方案:

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

答案 5 :(得分:2)

可悲的是,这只是使用Internet Explorer的另一个恼人的怪癖。

enter image description here

简单的解决方案是在您的PC上运行一个小的.reg文件,告诉IE 自动打开.json文件,而不是唠叨是否打开/保存它。

我已经在这里提供了您需要的文件副本:

JSON mime type

您需要拥有管理员权限才能运行此功能。

答案 6 :(得分:1)

以上javascript代码是您在Web应用程序中使用的代码吗? 如果是这样 - 我想在其中指出一些错误: 首先 - 它在'success'回调函数的定义中有一个额外的'{'符号 其次 - 在定义ajax回调后它没有')'标志。 有效代码应如下所示:

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

尝试使用上面的代码 - 它在所有3个IE版本(7,8,9)上给了我'Yay'警报。

答案 7 :(得分:0)

我在使用jQuery FileUpload plugin时遇到了这个问题。

然后我查看了他们的文档,最准确的是在Content-Type Negotiation section,并按照他们对 Ruby / Rails 的建议。

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

这解决了我的问题。

快速解释:对于旧的IE / Opera版本,此插件将使用带有text/plaintext/html内容类型的iframe,因此如果您强制响应{ {1}},浏览器会尝试下载它。使用与请求中相同的内容类型将使其适用于任何浏览器。

答案 8 :(得分:0)

就我而言,当控制台中出现JS语法错误(与确切位置无关)并且dataType: 'json'完全没有作用时,IE11似乎会表现出这种方式。