开始使用IE9测试我的jQuery应用程序。看起来我可能在这里遇到麻烦。 我注意到当我将JSON数据返回到Javascript方法时,我总是得到这个提示符:“你想打开还是保存这个文件?”并为我提供了3个按钮:打开,保存和取消。当然,我的javascript正在根据JSON对象中设置的值进行操作,但由于IE9没有将其传递给脚本,我无法从那里执行后续操作。
其他人遇到此问题?这是一张快照。
答案 0 :(得分:21)
如果有人使用 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);
}
这解决了我的问题!
答案 1 :(得分:13)
(最初为this question发布的答案。)
如果使用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 :(得分:6)
我昨天也遇到了这个问题,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);
});
答案 3 :(得分:3)
在我的情况下,当响应头中的contentType是“application / json; charset = UTF-8”时,IE 9显示提示。但改为“text / html”然后提示没有显示,尽管所有水獭浏览器都可以使用“application / json; charset = UTF-8”。
答案 4 :(得分:2)
实际上,你是对的@EricLaw。在Json结果中设置内容类型后,它工作正常。 我不得不添加以下几行:
result.ContentEncoding = System.Text.Encoding.UTF8;
result.ContentType = "application/json; charset=UTF-8