IE9 JSON数据“你想打开还是保存这个文件”
开始用IE9testing我的jQuery应用程序。 看来我可能会在这里遇到一些麻烦。 我注意到当我将JSON数据返回给Javascript方法时,我总是得到这个提示:“你想打开还是保存这个文件? 并为我提供了3个button:打开,保存和取消。 当然,我的JavaScript正在基于JSON对象中设置的值进行操作,但由于IE9没有将其传递给脚本,因此我无法执行后续操作。
任何人面临这个问题? 这是一个快照。
如果有人正在使用ASP.net MVC,并试图解决这个问题 – 我在MVC框架中使用了下面的内置方法。 只需更新JsonResult上的内容types和编码即可 。
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); }
这解决了我的问题!
(最初发布的这个问题的答案。)
如果使用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
我昨天也遇到了这个问题,WebAPI返回了一个URL列表(asynchronous上传的文件)。
只需将内容types设置为“text / html”,而不是WebAPI服务的默认“application / json; charset = UTF-8”。 我得到了作为JSONstring的响应,然后使用$ .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); });
在我的情况下,当应答头中的contentType是“application / json; charset = UTF-8”时,IE 9显示提示。 但改为“文本/ HTML”,然后提示不显示,虽然所有的水獭浏览器都与“应用程序/ JSON;字符集= UTF-8”罚款。
其实你是对的@EricLaw。 在Json结果中设置内容types之后,它工作。 我不得不添加以下几行:
result.ContentEncoding = System.Text.Encoding.UTF8; result.ContentType = "application/json; charset=UTF-8