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

时间:2014-06-09 19:16:42

标签: javascript php jquery ajax

我有以下表格,其中有许多相似类型的输入字段具有相同的名称(例如,10个字段用于“名称”,10个字段用于“地址”)。这些输入字段重复多少次,不能在之前说过,因此不能给出静态的不同名称(例如'name1','name2','address1','address2')。

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

必填:

  1. 如何正确发布所有输入数据?
  2. 最好的方法是命名这样的包含类似数据的输入字段,以便用php捕获这些数据(表单是在php中生成的)?
  3. 示例代码:

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

3 个答案:

答案 0 :(得分:3)

我认为您可以使用$.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
} 

答案 1 :(得分:3)

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

答案 2 :(得分:0)

您必须序列化数据并通过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;
            }