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

兼容模式下的Internet Explorer以ajaxcallback方法从服务器获取数据,如果要保存数据或打开,则popup对话框。 如何摆脱这一点?

客户说:

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

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

我怎样才能说服IE浏览器只显示应用程序JSON而不是提供下载

如果不:

你有没有尝试设置ajax选项中预期的数据types? 即dataType:'json'

您是否尝试过其他内容types,例如“application / json”或“text / javascript”

即使它不是正确的方式,设置内容types为文本/ HTML使IE正确处理这个对我来说:

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

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

如果使用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); } } 

现在,你的控制器都可以inheritanceExtendedController,只需调用return Json(model);

  • 而不会修改那些可以很好地播放的浏览器的响应内容types(不是<= IE9!)
  • 而不必记住在各种Ajax操作方法中使用Json(data, "text/plain")

这适用于json请求,否则会在IE8和IE9中显示“打开或保存”消息,例如jQueryfile upload

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

在返回响应之前,我将内容types改为“text / html”而不是“application / json”服务器端。 在一篇博客文章中描述,其中还添加了其他解决scheme:

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

上面的JavaScript代码是您在Web应用程序中使用的代码吗? 如果是的话 – 我想在其中指出一些错误:首先 – 它有一个额外的“成功”callback函数的定义 – 它没有定义ajaxcallback后的')'符号。 有效的代码应该如下所示:

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

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

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

然后我看了一下他们的文档,大部分是在Content-Type Negotiation部分 ,然后是他们对Ruby / Rails的build议。

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

哪个问题解决了我的问题。

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

不幸的是,这只是使用Internet Explorer的另一个烦人的怪癖。

在这里输入图像说明

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

我已经把这个文件的副本放在这里了:

JSON MIMEtypes

您需要拥有pipe理员权限才能执行此操作。