我在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...
});
答案 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 选择了同名的空表单。