2011-05-16 89 views
2
$("#frmCompose").submit(function() { 

      $(this).ajaxSubmit({ 

       success: function (response) { 
        alert('success'); 
       } 
      }); 

     }); 

控制器代码:浏览器想从控制器返回的Json时下载JSON作为一个文件

[HttpPost] 
     public ActionResult SendEmail(EmailMessageModel emailMessage) 
     { 
      try 
      { 
       // do something with the data 
       return Json(new StatusModel { error = false }); 
      } 
      catch (Exception) 
      { 
       return Json(new StatusModel { error = true, message = "Could not send email" }); 
      } 
     } 

查看代码:

<form id="frmCompose" method="post" action="SendEmail"> 
    <button id="compose" class="btn-pencil"> 
     Send</button> 
    <div class="fields-inline"> 
     <div class="editor-label"> 
      @Html.Label("To:") 
     </div> 
     @Html.TextBox("txtTo") 
    </div> 
    <div class="fields-inline"> 
     <div class="editor-label"> 
      @Html.Label("Subject:") 
     </div> 
     @Html.TextBox("txtSubject") 
    </div> 
    <div class="fields-inline"> 
     <div class="editor-label"> 
      @Html.Label("Body:") 
     </div> 
     @Html.TextArea("txtBody") 
    </div> 
</form> 

在我控制我返回JSON结果与短信。 为什么FireFox中的视图想要下载json作为文件下载?

所有我想要做的就是确保我获得成功回调

+0

当您进行AJAX调用或者当您访问浏览器地址栏中的地址时,您是否看到了这一点? – dlev 2011-05-16 14:21:27

+0

你可以发布你的控制器代码吗?在您的ajax请求中另外指定'dataType:'json''。 – DanielB 2011-05-16 14:22:37

+0

@DanielB - 我已经添加了对原文的编辑。 – jaffa 2011-05-16 14:34:26

回答

3

解决办法是返回的形式提交()函数调用中的错误。

这样,JSON结果提交函数内消耗掉,不会通过浏览器进行处理。

$("#frmCompose").submit(function() { 

      // submit data to server here.... 


      return false; 
     }); 
0

内的响应按照documentation

由于无法上传使用浏览器的 XMLHttpRequest对象 文件,这个插件 使用一个隐藏的iframe元素,以帮助 与任务。这是一种常见的 技术,但它有内在的局限性 。的IFRAME元素被用来作为 窗体的 提交操作的目标,这意味着 服务器响应被写入 iframe中。如果响应 类型为HTML或XML,但如果响应类型为脚本 或JSON,两者通常都包含 字符需要转用 在发现时使用实体引用,则无效 HTML标记。

要占 脚本和JSON响应的挑战,形式 插件允许这些反应是 嵌入到textarea元素,它 建议您在 一起选择使用时 这样做这些响应类型与文件上传。

这基本上意味着,如果你要上传使用jQuery表单插件文件和表单中包含文件输入字段需要服务器返回的JSON包装成<textarea>标签。