【问题标题】:jQuery form.serialize() returns an empty stringjQuery form.serialize() 返回一个空字符串
【发布时间】:2011-05-28 15:27:28
【问题描述】:

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...
});

【问题讨论】:

  • 你从哪里得到空字符串?你能显示你的 php 代码吗?
  • 作为测试,您的代码似乎工作正常:jfcoder.com/test/serialize.php 我所做的只是在processor.php 上&lt;?php print_r($_POST); ?&gt;。确保并打开控制台。
  • serialize() 肯定不会返回空字符串:jsfiddle.net/fallen888/HFTV6
  • 在您的 $.post() .. 之前添加 alert($('#category-dynamic').serialize()) 以向自己证明 serialize() 正在返回数据
  • 当然 serialize(9 不返回空字符串,但确实如此,问题出在客户端(Java控制台中的 $('#category-dynamic').serialize() 也返回 "" ) 所以这里不需要 PHP 脚本

标签: jquery html serialization


【解决方案1】:

提醒其他可能遇到此问题的人。除了不是disabled 之外,&lt;input&gt; 字段还必须具有name 属性才能使 serialize() 工作。

【讨论】:

  • 在提供的代码中,输入确实有一个“名称”。
  • 感谢这正是我所缺少的!
【解决方案2】:

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

原来我在调用 serialize() 之前禁用了表单上的输入元素。为了修复它,我更改了代码以检索表单值 before 禁用,然后在 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)
{
  //...

【讨论】:

    【解决方案3】:

    迟到的答案,但相关。

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

    【讨论】:

      【解决方案4】:

      如果这对将来的某人有帮助,如果它在 &lt;form&gt; 中是一个 &lt;form&gt;,它也会返回一个空字符串(这显然已经是一个禁止但需要检查的东西)。

      【讨论】:

        【解决方案5】:

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

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

        JQuery 选择了同名的空表单。

        【讨论】:

          猜你喜欢
          • 2014-03-18
          • 2012-06-05
          • 2013-12-19
          • 2019-10-29
          • 2011-02-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多