IE想下载JSON结果... MVC3(IE wants to download JSON resu

2019-07-30 04:24发布

我MVC3应用程序上传从用户到我们的服务器的文件。 我返回JsonResult如有显示任何错误,:

  [HttpPost] 
    public JsonResult SaveDocument(DocumentModel model, HttpPostedFileBase postedFile)
    {
         //my wonderful code
         return Json(new { success = true, message="ok" });

     }

继承人如何我提出的要求:

 var isSubmitting = false;
  var addDocumentOptions = {
       beforeSubmit: beforeAddDocumentSubmit,  // pre-submit callback 
      success: afterDocumentSubmit  // post-submit callback 
  };
  $('#btnCreateDocument').click(function (e) {
      e.preventDefault();
      $('#divError').html('');
      if (!isSubmitting) {
          $('#createDocForm').submit();
      }
    });

这个JavaScript函数上传完成时运行:

    function afterDocumentSubmit(responseText, statusText, xhr, $form) {
        if (responseText.success) {
            //no errors
          } else {
             $('#divError').html('Error: ' + responseText.message);
     }
   }

在FF,铬等,我的javascript代码运行正常,但在IE浏览器,浏览器要下载JSON结果为文本。 我得到一个下载/打开文件对话框不应该出现的对话框。 如何使IE无法下载我的JSON结果和行为像其他浏览器? 谢谢

Answer 1:

我遇到了类似的问题做同样的Spring MVC中爪哇。 问题是,春天正在恢复的内容类型的JSON的结果的application/json ,这似乎让IE要下载它。 你可以尝试改变内容类型text/plain ; IE不会提示你下载文件在这种情况下。 我怀疑,类似的东西可能会发生在这里。

你可以试试:

return Json(new { success = true, message = "ok" }, "text/plain");

为了应对新的问题:问题是responseText只是一个字符串。 什么,你需要做的是将其转换成一个JavaScript对象。 你可以像下面这样做:

var response = JSON.parse(responseText);
if(response.success) {
   ...
}

大多数浏览器都支持JSON.parse() 。 如果您在使用不兼容的浏览器的问题,你可以随时使用JSON JavaScript库 。



Answer 2:

胡乱猜测:您正在使用的jquery.form插件,它允许你上传使用AJAX的文件和你没有看过的文件 ,其规定如下:

支持XMLHttpRequest的2级浏览器将能够无缝地上传文件,甚至得到进度更新的上传收益。 对于旧的浏览器,回退技术被用于涉及I帧,因为它无法上传使用水平XMLHttpRequest对象的1 implmenentation文件。 这是一种常见的后备技术,但它有内在的局限性。 IFRAME元素作为形式的提交操作的目标,这意味着服务器响应写入到iframe中。 这是好的,如果响应类型是HTML或XML,但如果数据类型是script或JSON,两者一般都需要用实体引用来repesented在HTML标记时发现字符不正常工作。

为了说明使用iframe的模式时,脚本和JSON响应的困难,这个插件允许嵌入到textarea元素,这些反应,所以建议你在一起选择与文件上传和老年人使用时,这些响应类型这么做浏览器。 但是请注意,如果有形式没有文件输入,则要求采用正常XHR提交表单(不是一个iframe)。 这给你的服务器代码的负担,知道何时使用一个textarea,何时不。

现在,您已经阅读它,如果你希望你的代码在IE下工作,我在已经例举了,你应该采取相应的行动, 这个帖子 。



Answer 3:

正确的JsonResult回报应该像这样:

[HttpPost] 
public JsonResult SaveDocument(DocumentModel model, HttpPostedFileBase postedFile)
{
    ...
    return Json(new { success = true, message="ok" }, "application/json; charset=utf-8", JsonRequestBehavior.AllowGet);
}


文章来源: IE wants to download JSON result…MVC3