【问题标题】:JQUERY: how to serialize input fields with same nameJQUERY:如何序列化具有相同名称的输入字段
【发布时间】:2014-07-30 09:49:51
【问题描述】:

我有以下表单,其中包含许多具有相同名称的类似类型的输入字段(例如,10 个字段用于“姓名”,10 个字段用于“地址”)。这些输入字段将重复多少次,无法事先说明,因此不能为它们赋予静态不同的名称(例如,'name1'、'name2'、'address1'、'address2')。

问题:当我使用 ajax post(序列化)发布数据时,它只发布具有相同名称的字段的第一个值(使用 php 接收)。

必填:

  1. 如何正确发布所有输入数据?
  2. 命名此类包含类似数据的输入字段的最佳方式是什么,以便用 php 捕获这些数据(表单是在 php 中生成的)?

示例代码:

    <form name="content">
     <table>
      <tr>
       <td>
        <input name="full_name" type="text" />
       </td>
       <td>
        <input name="address" type="text" />
       </td>
      </tr>
      <tr>
       <td>
        <input name="full_name" type="text" />
       </td>
       <td>
        <input name="address" type="text" />
       </td>
      </tr>
    </table>
   </form>

【问题讨论】:

标签: javascript php jquery ajax


【解决方案1】:

我认为在你的情况下你可以使用$.serializeArray():

var data = $('form[name="content"]').serializeArray();

这将产生如下内容:

data = [
     {
       name : "full_name",
       value : "thefieldvalue"
     },
     {
       name : "address",
       value : "theaddressvalue"
     },
     .....
];

看这个:

data:$('form[name="content"]').serializeArray()+'&request=insert_invoice' 

不是正确的数据发送方式,您可以尝试以下方法:

data:{
    frmvalues : $('form[name="content"]').serializeArray(), 
    request:insert_invoice
} 

【讨论】:

  • data:$('form[name="content"]').serializeArray()+'&request=insert_invoice' *** 以下仅发布 "request=insert_invoice" 。有什么想法,为什么?
  • @origin 你可以看看更新的发送数据的方式。你应该发送一个包含{key:value} 对的对象。
  • 谢谢兄弟,但有了以上内容,我在使用 php print_r() 时得到以下输出 - Array ( [request] =&gt; insert_invoice )
  • 你可以试试这个吗:print_r(array('frmvalues' =&gt; frmvalues, 'request' =&gt; request));
  • @origin 似乎您只打印了一个键 request 而不是 frmvalues
【解决方案2】:
<input name="full_name[]" type="text" value="foo" />
<input name="full_name[]" type="text" value="bar" />

在 PHP 中它将是:

Array (
    full_name => Array (
         0 => foo
         1 => bar
    )
)

【讨论】:

  • 问题在 Jquery 上,而不是 PHP 上
  • @Hittz,问题是关于如何使用 jQuery 发送序列化数组,但它可以在纯 HTML 中实现。 PHP 只是在服务器端展示示例。
【解决方案3】:

您必须将数据序列化并通过 ajax 发送。在php上 侧反序列化数据并通过这个函数格式化得到 输出描述了我上面的评论。没有它就不会 返回所需的输出。

 public function serializedFormDatajQuery2Array($serializedArr){
                  $aFormData = array();
                  foreach($serializedArr as $aRow){

                     if(isset($aFormData[$aRow['name']]) && !is_array($aFormData[$aRow['name']])){
                        $sValue = $aFormData[$aRow['name']];
                        $aFormData[$aRow['name']] = array();
                        $aFormData[$aRow['name']][] = $sValue;
                        $aFormData[$aRow['name']][] = $aRow['value'];
                        continue;
                     }

                                if(is_array($aFormData[$aRow['name']])){
                                            $aFormData[$aRow['name']][] = $sValue;
                                            continue;
                                }

                  $aFormData[$aRow['name']] = $aRow['value'];
                  }
                             return $aFormData;
            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    • 2010-10-03
    • 1970-01-01
    • 2015-03-24
    • 2022-09-30
    相关资源
    最近更新 更多