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中为您提供的所有版本.
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);...
Json(data, "text/plain")在各种Ajax操作方法中使用这适用于json请求,否则将在IE8和IE9中显示"打开或保存"消息,例如由jQuery文件上载生成的消息
Car*_*ire 14
听起来像这样的问题可能与您有关:
如何说服IE只显示Application json而不是提供下载
如果不:
您是否尝试过设置ajax选项中预期的dataType?即dataType:'json'
您是否尝试过其他内容类型,例如'application/json'或'text/javascript'