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

Anu*_*adi 38 json internet-explorer-9

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

其他人面临这个问题?这是一个快照.在此输入图像描述

Dea*_*ano 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);
}
Run Code Online (Sandbox Code Playgroud)

这为我解决了这个问题!


Chr*_*ris 13

(最初为此问题发布的答案.)

如果使用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);...

  • 没有修改那些播放得很好的浏览器的响应内容类型(不是<= IE9!)
  • 无需记住Json(data, "text/plain")在各种Ajax操作方法中使用

这适用于json请求,否则将在IE8和IE9中显示"打开或保存"消息,例如由jQuery文件上载生成的消息


Tie*_* Do 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);
});
Run Code Online (Sandbox Code Playgroud)


Anu*_*adi 2

事实上,你是对的@EricLaw。在 Json 结果中设置内容类型后,它就起作用了。我必须添加以下几行:

 result.ContentEncoding = System.Text.Encoding.UTF8; 
 result.ContentType = "application/json; charset=UTF-8
Run Code Online (Sandbox Code Playgroud)