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


JQUERY: how to serialize input fields with same name

我有下面的表单,它有很多具有相同名称的类似类型的输入字段(例如,10个字段表示"name",10个域表示"address"(。这些输入字段将重复多少次,无法在前面说明,因此不能为它们指定静态的不同名称(例如"名称1"、"名称2"、"地址1"、"地址2"(。

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

必需:

  1. 如何正确张贴所有输入数据
  2. 对于name这样的包含类似数据的输入字段,用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>

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

您必须序列化数据并通过ajax发送数据。在php上side取消对数据的序列化并通过此函数对其进行格式化,以获得输出描述了我上面的评论。没有它就不会返回所需的输出。

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