兼容模式下的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!" } };
答案 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);
...
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的另一个恼人的怪癖。
简单的解决方案是在您的PC上运行一个小的.reg文件,告诉IE 自动打开.json文件,而不是唠叨是否打开/保存它。
我已经在这里提供了您需要的文件副本:
您需要拥有管理员权限才能运行此功能。
答案 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/plain
或text/html
内容类型的iframe,因此如果您强制响应{ {1}},浏览器会尝试下载它。使用与请求中相同的内容类型将使其适用于任何浏览器。
答案 8 :(得分:0)
就我而言,当控制台中出现JS语法错误(与确切位置无关)并且dataType: 'json'
完全没有作用时,IE11似乎会表现出这种方式。