2010-10-08 58 views
1

我使用jQuery的表單插件(如this one的一些線程中建議)將一個Ajax文章發佈到.NET MVC控制器並使用JSON我得到背部。它在Chrome中運行得很好,但在其他一些瀏覽器(包括Firefox 3)中,表單將結果提交到「保存或打開此文件」對話框。 JavaScript的樣子:ASP.NET MVC中的某些瀏覽器的JSON響應問題

var options = { 
      dataType: "json", 
      clearForm: true, 
      beforeSubmit: hideUpdateField, 
      success: handleNewsPostSuccess 
     }; 

     $('div#Updates form').ajaxForm(options); 

和控制器響應的肉:

Object response = new { html = RenderPartialViewToString("DisplayNewsPost", np), newpoints = points.ToString() }; 
return Json(response, "application/json; charset=utf-8"); 

我缺少什麼?這就像提交事件沒有得到附加在Firefox和其他問題的瀏覽器。我嘗試使用ajaxSubmit作爲自己的提交動作,而不是返回false,但沒有區別。

回答

2

使用不同的MIME類型響應;簡單的text/plain應該可以工作。我相信FF對於未知的application/* MIME類型感到困惑,因此認爲它是一些特定於應用程序的數據,最好作爲單獨的文件下載。

或者,您可以使用Content-Disposition標題進行試驗,將其設置爲inline。 Firefox應該服從它,但是IIRC在IE上可能存在一些問題。

+1

我會認爲這是FireFox實現中的一個錯誤,但是你使用的是你所得到的,而不是你想要的。 – 2011-06-08 13:05:58

0

JSON的方法已經設置適當的內容類型,這樣你就不需要再重複它:

return Json(response); 

但是從你所描述的行爲(另存爲對話框),我懷疑的形式實際上是不發佈使用AJAX,但一個正常的POST。這可能是由於在應用.ajaxForm函數時DOM尚未準備好。請確保你ajaxifying表單內$(document).ready

$(function() { 
    var options = { 
     dataType: "json", 
     clearForm: true, 
     beforeSubmit: hideUpdateField, 
     success: handleNewsPostSuccess 
    }; 
    $('div#Updates form').ajaxForm(options); 
}); 

此外,如果在你的handleNewsPostSuccess回調您在DOM重建形式ajaxForm可能不再適用於它,你嘗試提交將執行第二次一個正常的POST。