2011-05-16 63 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>標籤。