【问题标题】:IE tries to download JSON in ASP. NET MVC 3IE 尝试在 ASP 中下载 JSON。网络 MVC 3
【发布时间】:2012-01-25 09:26:38
【问题描述】:

我试图从我的操作中返回 Json,之后 IE 尝试下载它并向我显示保存对话框。 我在 Firefox 中测试过,它运行良好。

return Json(new { success = false, message = ex.Message }, "application/json");

这种行为的原因是什么?我该如何解决这个问题?

在 Javascript 部分之后我尝试这个

 if (responseJSON.success == false) {
                        alert(responseJSON.message);
                        cancel();
                    }

但 IE 无论如何都不会显示警报。它给我带来了保存对话框。

我尝试将"application/json" 更改为"text/plain" 并且保存对话框消失了,但我还看不到警报。我错过了什么?

编辑:

这是我的复杂 Javascript,我正在使用 Valums qquploader(ex-Ajaxupload) 上传图片

 var uploader = new qq.FileUploader({
                element: document.getElementById("image-upload"),
                action: '/Home/ImageUpload',
                allowedExtensions: ['jpg', 'png', 'gif'],
                sizeLimlit: 2048,onComplete: function (id, fileName, responseJSON) {
                    if (responseJSON.success == false) {
                        alert(responseJSON.message);
                        cancel();
                    }
                    else {
                         alert("success");
                          //some code here
                        }
                     }
                   });

我在 else 部分使用 alert("success"); 进行了测试,并将 json 转发为 "text/plain",之后我看到了警报。但在那个时候responseJSON.success != false对我来说。你对此有什么建议吗?

【问题讨论】:

  • 你如何称呼你的行动?你能告诉我们客户端的javascript吗?
  • 任何 IE 插件或本地设置调整?检查您注册的 MIME 类型。
  • 检查我的编辑我已经编写了部分 Javascript。 @John Gibb,我认为我如何称呼我的行动并不重要。
  • 您可以发布发出请求的完整 javascript 吗?
  • 看看新的编辑。

标签: javascript asp.net-mvc json asp.net-mvc-3


【解决方案1】:

我已经用这个技巧解决了这个问题

return Json(new { success = false, message = ex.Message }, "text/html");

现在它可以工作了。但是谁能解释为什么它适用于 text/html,而不适用于 application/json 和 text/plain。首先是尝试下载 JSON,其次是返回 JSON 字段的未定义属性。

【讨论】:

  • 我遇到了完全相同的问题,并通过将“application/json”更改为“text/html”使其工作。我在一篇博文中写下了我的发现,也许可以为您提供更多信息:blog.degree.no/2012/09/…
  • IE 在 IE8 之前在浏览器中没有内置的 json。这导致了很多问题。在网页中,您可以通过添加 json2.js 来解决此问题。可从github.com/douglascrockford/JSON-js 获得
【解决方案2】:

使用使用iframe 的上传插件通过 IE 进行上传时会出现此问题(在 9.0 上测试)。

IE 设置标题 Accept: text/html, , application/xhtml+xml, */*,因此当您回复 Content-type: application/json 时,它假定它是文件(或者至少这是我在网络上能找到的唯一解释)。

因此,为避免这种情况,您需要设置Content-type: text/html 或Content-type: text/plain。

我建议使用ActionFilter 来实现它;检测 IE 和多部分 POST 并相应地更改内容类型,而不是手动更改内容类型。

【讨论】:

    【解决方案3】:

    您可能没有为您的 json 内容设置正确的 mime 类型(对于 IE,请尝试 text/plain)

    见:What problems may using the MIME type application/json cause?

    【讨论】:

      【解决方案4】:

      我使用的是同一个上传器并且遇到了同样的问题。

      它与发送的请求标头有关。 IE 需要请求具有指示 json 的接受标头。

      xhr.setRequestHeader("Accept", "application/json, text/javascript, */*; q=0.01");
      

      如果你在这一行之后插入:

      xhr.setRequestHeader("Content-Type", "application/octet-stream");
      

      在 js 文件中(我的称为 fileuploader.js)那么你应该不再有问题,并且不需要在你的回报中指出 text/html。

      附言 我注释掉了 content-type 行,但我不再确定为什么。如果仅添加此接受行不起作用,请尝试将内容类型标头也注释掉。

      编辑:

      我再次查看了我的文件,似乎也进行了另一项更改。

      而不是行:

      xhr.send(file)
      

      我输入:

      var formData = new FormData();
      formData.append("image", file);
      xhr.send(formData);
      

      这是在上面的 setrequesrheader 行之后。

      我不确定此更改是否适用于所有用途,例如多个文件上传。我只上传一张图片供我使用。

      【讨论】:

      • 我已经尝试了两种方式来评论和不评论那一行,但结果是一样的。 IE 建议 mi 下载该 JSON。
      • 看起来我错过了我在同一个函数中所做的另一项更改。我编辑了我的帖子。对此感到抱歉。
      • 我再次查看了我的文件,将其与原始文件进行了比较,我所做的唯一其他更改是消除了查询字符串,因为我也没有使用参数选项。然而,这是因为当它有 ? 时我无法让我的 URL 工作。所以这对你没有帮助。祝你好运。
      猜你喜欢
      • 2013-06-03
      • 2015-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-04
      • 1970-01-01
      • 2011-08-20
      • 2019-01-09
      相关资源
      最近更新 更多