IE9 JSON数据“你想打开还是保存这个文件”

时间:2011-03-22 09:07:20

标签: json internet-explorer-9

开始使用IE9测试我的jQuery应用程序。看起来我可能在这里遇到麻烦。 我注意到当我将JSON数据返回到Javascript方法时,我总是得到这个提示符:“你想打开还是保存这个文件?”并为我提供了3个按钮:打开,保存和取消。当然,我的javascript正在根据JSON对象中设置的值进行操作,但由于IE9没有将其传递给脚本,我无法从那里执行后续操作。

其他人遇到此问题?这是一张快照。enter image description here

5 个答案:

答案 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); ...

  • 没有修改那些播放得很好的浏览器的响应内容类型(不是< = IE9!)
  • ,无需记住在各种Ajax操作方法中使用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