我试图从我的行动返回Json,然后IE试图下载它并显示给我保存对话框。我在Firefox上测试了它,在那里它运行得很好。
return Json(new { success = false, message = ex.Message }, "application/json");这种行为的原因是什么,我如何解决这个问题?
之后,在Javascript部分中,我尝试这样做
if (responseJSON.success == false) {
alert(responseJSON.message);
cancel();
}但无论如何,我都没有表现出警觉。它给我带来了保存对话框。
我试图用"application/json"更改"text/plain",然后保存对话框消失了,但是我还不能看到警报。我遗漏了什么?
编辑:
这是我完整的Javascript,我使用(前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");进行了测试,并将json转发为"text/plain",之后我看到了警报。但在那个时候responseJSON.success != false对我来说。你对此有什么建议吗?
发布于 2011-12-21 15:43:59
我用这个伎俩解决了这个问题
return Json(new { success = false, message = ex.Message }, "text/html");现在起作用了。但是,我能解释为什么它与text/html一起工作,而不适用于application/json和text/平原。首先是下载JSON,其次是返回JSON字段的未定义属性。
发布于 2012-09-22 14:35:46
当使用使用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,并相应地更改内容类型。
发布于 2011-12-21 15:14:42
可能您没有为您的json内容设置正确的mime类型(对于IE,尝试文本/纯文本)
请参阅:What problems may using the MIME type application/json cause?
https://stackoverflow.com/questions/8591998
复制相似问题