JQUERY: 如何序列化具有相同名称的输入字段

4
我有一个表单,其中包含许多相似类型的输入字段,名称相同(例如,“name”的10个字段,“address”的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>

重复?https://dev59.com/CHE85IYBdhLWcg3wwWUb - subhaze
3个回答

4

我认为在你的情况下,可以使用$.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
} 

数据:$('form[name="content"]').serializeArray()&'request=insert_invoice' *** 以下仅发布“request = insert_invoice”。有任何想法,为什么? - origin
你可以看一下更新后发送数据的方法。你应该发送一个包含 {key:value} 对的对象。 - Jai
谢谢兄弟,但是使用上述代码时,我在使用PHP的print_r()函数时得到了以下输出 - Array ( [request] => insert_invoice ) - origin
你可以尝试使用以下代码:print_r(array('frmvalues' => frmvalues, 'request' => request)); - Jai
看起来你只打印了一个键request而不是frmvalues - Jai

4
<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
    )
)

3
问题在于 jQuery,而不是 PHP。 - Hittz
@Hittz,问题是如何使用 jQuery 发送序列化数组,但在普通的 HTML 中也可以实现。PHP 只是为了在服务器端展示示例。 - barell

0

你需要将数据序列化并通过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;
            }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接