jQuery form.serialize()返回一个空字符串

时间:2011-05-28 15:27:28

标签: jquery html serialization

我在jQuery中遇到了form.serialize()函数的问题。 当我尝试通过AJAX提交序列化表单时,serialize()只返回一个空字符串。

我的HTML大纲可能存在问题:

<form id="category-dynamic" class="dynamic">
   <fieldset id="inner-fieldset">
      <legend id="new-category">
        <label for="category-name">Category Name: </label>
        <input type="text" name="category-name" value="" />
      </legend>
      <ul id="category-fields">
         <li>
           <label>Field #1:</label><br />
           <input type="text" name="fields[]" value="" />
         </li>
         <li>
           <label>Field #2:</label><br />
           <input type="text" name="fields[]" value="" />
         </li>
      </ul>
   </fieldset>
</form>

在我的jQuery函数中,我只需调用:

$.post("processor.php", $('#category-dynamic').serialize(), function(data){
     // data handling here...
});

5 个答案:

答案 0 :(得分:7)

我遇到了类似的问题。在调试JavaScript时,我可以看到表单中的输入值,但是在调用serialize()时,结果字符串为空。

原来我在调用serialize()之前禁用了表单上的输入元素。为了解决这个问题,我更改了代码以在禁用之前检索表单值,然后在post方法中使用表单值字符串。

// Disabling the input fields breaks serialize, so get the values string first
var formValues = form.serialize();
form.find('input').attr('disabled', 'disabled'); 
// Now post the form to the server
$.post(this.action, formValues, function (data)
{
  //...

答案 1 :(得分:7)

为可能遇到此问题的其他人提醒。除了disabled之外,<input>字段还必须具有name属性才能使serialize()生效。

答案 2 :(得分:2)

如果这有助于将来的某个人,如果<form>中的<form>为{{1}},那么它也会返回一个空字符串(这已经是一个明显的禁止但需要检查的东西)。< / p>

答案 3 :(得分:1)

迟到的答案,但相关。

除了需要名称的输入字段外,FORM本身还必须具有名称,而不仅仅是ID。

答案 4 :(得分:0)

我有一个 ASP.NET MVC 应用程序 使用自动设置名称属性的@Html.TextBoxFor。

就我而言,我有 2 个同名表单,其中一个根本没有输入。我用导致空字符串的输入重命名了那个,序列化它时一切都很好。

JQuery 选择了同名的空表单。