我开始使用IE9测试我的jQuery应用程序,发现可能会遇到一些问题。
我发现当我将JSON数据返回给Javascript方法时,总是会弹出提示框,询问:"您要打开还是保存此文件?",并提供三个按钮: "打开"、"保存"和"取消"。当然,我的javascript根据JSON对象中设置的值执行操作,但由于IE9不会将其传递给脚本,因此我无法执行后续操作。
还有其他人遇到这个问题吗?以下是快照。
我开始使用IE9测试我的jQuery应用程序,发现可能会遇到一些问题。
我发现当我将JSON数据返回给Javascript方法时,总是会弹出提示框,询问:"您要打开还是保存此文件?",并提供三个按钮: "打开"、"保存"和"取消"。当然,我的javascript根据JSON对象中设置的值执行操作,但由于IE9不会将其传递给脚本,因此我无法执行后续操作。
还有其他人遇到这个问题吗?以下是快照。
如果有人正在使用ASP.net MVC并尝试解决这个问题-我在MVC框架中使用了以下内置方法。只需更新JsonResult上的内容类型和编码即可。
public ActionResult Index(int id)
{
// Fetch some data
var someData = GetSomeData();
// Return and update content type and encoding
return Json(someData, "text/html", System.Text.Encoding.UTF8,
JsonRequestBehavior.AllowGet);
}
这个方法解决了我的问题!
Json
类在System.Web.Helpers
中,但是我收到了一个“需要方法、委托或事件”的错误信息,导致无法构建。不知道我缺少了什么? - atconway如果使用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);
}
}
return Json(model);
”...
Json(data, "text/plain")
”这适用于JSON请求,在IE8和IE9中会出现“打开或保存”消息,例如由jQuery文件上传发出的请求。
昨天我也遇到了这个问题,我的WebAPI返回了一个异步上传文件列表的URL集合。
只需将内容类型设置为"text/html",而不是WebAPI服务的默认值"application/json; charset=UTF-8"。我得到的响应是JSON字符串,然后使用$.parseJSON将其转换为JSON对象。
public async Task<HttpResponseMessage> Upload()
{
// ...
var response = Request.CreateResponse(HttpStatusCode.OK, files);
response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
return response;
}
// result is an iframe's body content that received response.
$.each($.parseJSON(result.html()), function (i, item)
{
console.log(item.Url);
});
实际上,@EricLaw 你是对的。在设置Json结果的内容类型之后,它可以正常工作。我必须添加以下几行:
result.ContentEncoding = System.Text.Encoding.UTF8;
result.ContentType = "application/json; charset=UTF-8