2013-05-10 73 views
0

當我張貼在下面的語法使用jQuery一的Html.Form:jQuery的崗位與form.serialize()接收空

$.post('<%: Url.Action("ActionName","ControllerName") %>', 
      $("#FormName").serialize()); 

對象被正確地發送到服務器,但如果我使用:

var reason = encodeURIComponent($("#FormName").serialize()); 
$.post('<%: Url.Action("ActionName","ControllerName") %>', 
         { reason: reason }); 

序列化對象爲空,當我使用encodeURIComponent或沒有它時,我會得到相同的結果。 我需要發送更多的參數數據到服務器,這就是爲什麼我想使用第二種方法,但我不能讓它正確地發送序列化的對象。

+0

查看發佈的數據(使用Fiddler或其他檢測工具)會顯示您的問題。 URI編碼單個數據點,而不是整個發佈的序列化字符串。 – asawyer 2013-05-10 12:23:08

+0

謝謝,有沒有可能用不同的方法來編碼它? – user1770407 2013-05-10 12:25:30

+0

我非常確定它已經編碼的數據:http://sectoverflow.com/a/6653908/426894 http://api.jquery.com/serialize/。.serialize()方法在標準URL中創建一個文本字符串編碼的符號。 – asawyer 2013-05-10 12:28:12

回答

1

它的工作原理是用[]拳擊序列化的字符串發佈數據時:

var reason = $("#FormName").serialize(); 
$.post('<%: Url.Action("ActionName","ControllerName") %>', 
        { reason: [reason] }); 

當HTTP提琴手檢查在後的身體差異執行此操作時:

var reason = $("#FormName").serialize(); 
$.post('<%: Url.Action("ActionName","ControllerName") %>', 
        { reason: reason }); 

body標籤舉行這樣的:原因=類型= 1條&評論= & ID = 15,因此不能在什麼變量實際持有區分。通過用[]裝箱,body標籤現在包含:reason%5B%5D = Type%3D1%26Comments%3D%26ID%3D1因此正確編碼發佈的數據。