IE想要下载JSON结果.... MVC3

Bou*_*ory 2 javascript c# asp.net-mvc-3

我的MVC3应用程序将文档从用户上传到我们的服务器.我返回一个JsonResult来显示任何错误,如果有的话:

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

     }
Run Code Online (Sandbox Code Playgroud)

以下是我如何提交请求:

 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();
      }
    });
Run Code Online (Sandbox Code Playgroud)

上传完成后,此javascript函数将运行:

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

在FF,Chrome等,我的javascript代码运行正常,但在IE中,浏览器想要将Json结果下载为文本.我得到一个不应出现的下载/打开文件对话框.我如何使IE不下载我的Json结果,并像其他浏览器一样行事?谢谢

Viv*_*ath 9

我在Java上的Spring MVC中遇到了类似的问题.问题是Spring返回了JSON结果的内容类型application/json,这似乎使IE想要下载它.您可以尝试将内容类型更改为text/plain; 在这种情况下,IE不会提示您下载文件.我怀疑这里可能会发生类似的事情.

你可以尝试:

return Json(new { success = true, message = "ok" }, "text/plain");
Run Code Online (Sandbox Code Playgroud)

为了解决您的新问题:问题在于它responseText只是一个字符串.您需要做的是将其转换为Javascript对象.你可以这样做:

var response = JSON.parse(responseText);
if(response.success) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

大多数浏览器都支持JSON.parse().如果您遇到与不兼容的浏览器有关的问题,您可以随时使用JSON Javascript库.