表单元素名称为数组的Ajax表单

时间:2012-11-29 09:51:41

标签: php jquery ajax post

我有一个表单,其元素名称为多维数组,如

 <form method="post" id="formDealOptions" name="formDealOptions">
  <table>
   <tr class="dealOptionRow saved"> 
     <td>                  
     <input type="text" name="dealOptionsGroup[1][dealOptionName]" value="dealOptionName1">
    </td>
    <td>                    
     <input type="text" name="dealOptionsGroup[2][dealOptionName]" value="dealOptionName2">
    </td>  
  </tr>
 </table>
</form>

如果我使用普通表单提交发布此表单,$ _POST数组就像

Array(
  'dealOptionsGroup' => Array( '1' => Array('dealOptionName' => dealOptionName1 )
                               '2' => Array('dealOptionName' => dealOptionName1 )
                             )
  )

这很好,我使用这个数组结构创建了服务器端验证。但是当使用serializeArray()(如

)通过ajax调用提交相同的表单时
var data = new Object();
data.postValues = $('#formDealOptions').serializeArray();   
$.ajax({
    type: "POST",
    url: GLOBAL_BASE_PATH + '/deal/ajaxsaveDealOptions/',
    data: data,
    success: function (data) {//}
});

现在post数组就像

[postValues] => Array
    (
        [0] => Array
            (
                [name] => dealOptionsGroup[1][dealOptionName]
                [value] => dealOptionName1
            )

        [1] => Array
            (
                [name] => dealOptionsGroup[2][dealOptionName]
                [value] => dealOptionName2
            )
    )

有没有办法在正常形式的帖子中使用ajax发布数组。

3 个答案:

答案 0 :(得分:1)

    <form method="post" id="formDealOptions"  name="formDealOptions">
  <table>
   <tr class="dealOptionRow saved"> 
     <td>                  
     <input type="text" name="dealOptionsGroup[1][dealOptionName]" id="aa" value="OptionName1">
    </td>
    <td>                    
     <input type="text" name="dealOptionsGroup[2][dealOptionName]" value="OptionName2">
    </td>  
     <td>                    
     <input type="submit" name="forms" id="" value="save">
      <input type="button" name="forms" id="submitButtonId" value="save">
    </td> 
  </tr>
 </table>
</form> <script type="text/javascript" src="jquery-1.7.2.js"></script>

<script type="text/javascript">
    var frm = $('#formDealOptions');
    frm.submit(function () {
        $.ajax({
            type: 'post',
            url: 'test.php',
            data: frm.serializeArray(),
            success: function (data) {
                alert(data);
            }
        });

        return false;
    });
</script>

test.php
---------
<?php

print_r($_REQUEST);


?>

答案 1 :(得分:0)

您可以使用这样的表单。然后发布值。

<form method="post" id="formDealOptions" name="formDealOptions">
  <table>
   <tr class="dealOptionRow saved"> 
     <td>                  
     <input type="text" name="dealOptionsGroup[dealOptionName][]" value="dealOptionName1">
    </td>
    <td>                    
     <input type="text" name="dealOptionsGroup[dealOptionName][]" value="dealOptionName2">
    </td>  
  </tr>
 </table>
</form>

答案 2 :(得分:0)

不要序列化

$.ajax({
    type: "POST",
    url: GLOBAL_BASE_PATH + '/deal/ajaxsaveDealOptions/',
    data:{ 
      'data1':$('input[value="dealOptionName1"]').val(),
      'data2':$('input[value="dealOptionName2"]').val(),
       //.....  
    },
    success: function (data) { }
    });

在php中

<?php $_POST['data1']; //etc ?>