Javascript IE尝试在ASP中下载JSON。NETMVC3

Javascript IE尝试在ASP中下载JSON。NETMVC3,javascript,asp.net-mvc,json,asp.net-mvc-3,Javascript,Asp.net Mvc,Json,Asp.net Mvc 3,我试图从我的操作中返回Json,之后IE尝试下载它并向我显示保存对话框。 我在Firefox中进行了测试,结果很好 return Json(new { success = false, message = ex.Message }, "application/json"); 这种行为的原因是什么?我如何解决这个问题 在Javascript部分之后,我尝试了这个 if (responseJSON.success == false) { alert

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

return Json(new { success = false, message = ex.Message }, "application/json");
这种行为的原因是什么?我如何解决这个问题

在Javascript部分之后,我尝试了这个

 if (responseJSON.success == false) {
                        alert(responseJSON.message);
                        cancel();
                    }
但IE并没有表现出警觉。它给我带来了一个保存对话框

我试图用
“text/plain”
更改
“application/json”
,保存对话框消失,但我还无法看到警报。我错过了什么

编辑:

这是我完整的Javascript,我使用ValumsQqqpLoader(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
                        }
                     }
                   });

我用
alert(“success”)进行了测试在我的else部分,并将json作为
“text/plain”
转发,然后我看到了警报。但是在那时候,
responseJSON.success!=对我来说是假的。您对此有什么建议吗?

可能您没有为json内容设置正确的mime类型(例如,try text/plain)


看:

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

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

现在它开始工作了。但是有人能解释一下为什么它可以使用text/html,而不能使用application/json和text/plain吗。第一个是尝试下载JSON,第二个是返回JSON字段的未定义属性。

我使用的是同一个上传程序,遇到了同样的问题

它与发送的请求头有关。IE需要请求有一个表示json的accept头

xhr.setRequestHeader("Accept", "application/json, text/javascript, */*; q=0.01");
如果在此行后插入此项:

xhr.setRequestHeader("Content-Type", "application/octet-stream");
在js文件(我的名为fileuploader.js)中,您应该不再有问题,并且不需要在返回中指示text/html

p、 美国。 我注释掉了内容类型行,但不再确定原因。如果只是将其添加到接受行不起作用,请尝试注释内容类型标题

编辑:

我又看了一遍我的文件,似乎又做了一次修改

而不是行:

xhr.send(file)
我提出:

var formData = new FormData();
formData.append("image", file);
xhr.send(formData);
这在上面的setRequesHeader行之后


我不确定这种改变是否适用于所有用途,比如多文件上传。我只上传一张图片供我使用

当使用使用
iframe
的上载插件使用IE进行上载时(在9.0上测试),会出现此问题

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

因此,为了避免这种情况,您需要设置
内容类型:text/html
内容类型:text/plain


我建议使用
ActionFilter
实现这一点;与其手动更改内容类型,不如检测IE和多部分帖子,并相应地更改内容类型。

您如何调用您的操作?你能给我们看一下客户端javascript吗?有没有IE插件或本地设置的调整?检查注册的MIME类型。检查我的编辑。我已经编写了部分Javascript@John Gibb,我认为我如何调用我的操作无关紧要。你能发布发出请求的完整javascript吗?看看新编辑。我已经尝试了注释和不注释这行的两种方法,但结果是一样的。IE建议mi下载那个JSON。看起来我错过了在同一个函数中所做的另一个更改。我编辑了我的帖子。对此很抱歉。我再次查看了我的文件,并将其与原始文件进行了比较,我所做的唯一其他更改是取消了查询字符串,因为我也没有使用参数选项。然而,这是因为我无法让我的URL工作时,它有?。所以这对你没有帮助。祝你好运。我遇到了完全相同的问题,并通过将“application/json”更改为“text/html”使其正常工作。我在一篇博客文章中写到了我的发现,也许这可以给你更多的信息:IE浏览器直到IE8才内置json。这造成了很多问题。在网页中,您可以通过添加json2.js来修复此问题。可从以下网址获得: