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/plain
或text/html
内容types的iframe,因此如果您将响应强制为json
,浏览器将尝试下载它。 使用与请求中相同的内容types将使其适用于任何浏览器。
不幸的是,这只是使用Internet Explorer的另一个烦人的怪癖。
简单的解决办法是在你的PC上运行一个小的.reg文件,告诉IE 自动打开.json文件,而不是唠叨是否打开/保存。
我已经把这个文件的副本放在这里了:
JSON MIMEtypes
您需要拥有pipe理员权限才能执行此操作。