【问题标题】:Browser downloads JSON result instead of passing back to script浏览器下载 JSON 结果而不是传回脚本
【发布时间】:2012-05-17 05:51:06
【问题描述】:

我编写了一个使用Valums fileuploader 的MVC3 应用程序。当用户上传文件时,服务器会传回一个 JSON 对象,指示成功/失败以及可能的错误消息。一些用户报告说他们的浏览器要求他们采取行动,就像下载文件(保存/打开)一样,而不是将 JSON 传递给 javascript。

我使用的是分布式上传器,我的 C# 控制器返回一个 JSONResult 像这样

return JSON(new { success = true }, "application/json");

或者如果出现问题

return JSON(new { success = false, error = exception.Message });

我无法重现这一点,并且收到了来自 IE9 和 Chrome 用户的报告。有没有人发生过这种情况,你做了什么来解决它?或者我应该从哪里开始故障排除?

编辑: 文件上传器将在 onComplete 事件上运行:

function(id, filename, responseJson) {
  if(responseJson.success != true) {
    alert("An error occurred: " + responseJson.error);
    return false;
  }
  return true;
}

【问题讨论】:

  • 你能显示你的javascript json解析代码吗

标签: javascript asp.net-mvc-3 file-upload


【解决方案1】:

试试这个:

return Json(new { success = true }, JsonRequestBehavior.AllowGet);

【讨论】:

  • 这并不能解决问题。实际上,请求根本不是使用 GET 发出的,而是使用 POST 发出的。如果缺少 AllowGet,控制器就会抛出错误。在这种情况下,某些浏览器将返回的 JSON 视为文件进行下载,这不是我想要的。
【解决方案2】:

原来问题在于 IE 无法处理 application/json 内容类型。将其设置为 text/html 可以使其工作,尽管它非常糟糕。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-18
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    相关资源
    最近更新 更多