2013-05-10 62 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因此正确编码发布的数据。