后关联数组使用jquery ajax

问题描述:

我使用cakephp窗体创建窗体。它是建立形式是这样的:后关联数组使用jquery ajax

<form name='license' action='/some/action' action='POST'> 

    <input type="text" id="license0Number" name="data[license][0][number]"> 
    <input type="text" id="license0Year" name="data[license][0][year]"> 

    <input type="text" id="license1Number" name="data[license][1][number]"> 
    <input type="text" id="license1Year" name="data[license][1][year]"> 

</form> 

在正常的形式提交表单时和获取数据这样的事情这是工作的罚款:

$data = array('license' => array('0' => array('number'=>'123', 'year'=>'2000'), 
            '1' => array('number'=>'321', 'year'=>'2003') 
           ); 

但是当我提交使用jQuery $.ajax()功能与形式相同用serialize()函数发布数据。我在服务器端获取这样的数据。

Array 
(
[data%5Blicense%5D%5B0%5D%5Bnumber%5D] => 123 
[data%5Blicense%5D%5B0%5D%5Byear%5D] => 2000 
[data%5Blicense%5D%5B1%5D%5Bnumber%5D] => 321 
[data%5Blicense%5D%5B1%5D%5Byear%5D] => 2003 
) 

如何在使用jQuery $ .ajax()函数时以关联数组的形式获取表单数据?

编辑:

$('#license_form').live('submit', function(event) { 

    var action = '/some/action'; 
    var data = $(this).serialize(); 

    $.ajax({ 

    type: "POST", 
    url: action, 
    data: data, // form data 
    success: function(result) { alert(result); }, 
    error: function() { alert('error'); } 
    }); 

    event.preventDefault(); 
}); 

感谢

+1

请问你可以发布ajax代码 – Khaleel

+1

你将无法在jQuery中对输入元素使用这些名称。但是,您可以通过正确更改名称来实现它。 – Diode

+0

jQuery部分被添加到问题中。 –

不需要用户低级别的ajax,而是使用$ .post简写。

试试这个:

$(function(){ 

    $("#submit").click(function(){ 
    //Since you're talking about POST 
    $.post('path_to_php_script.php', { 

     "license0Number" : $("#license0Number").val(), 
     "license0Year" : $("#license0Year").val(), 
     "license1Number" : $("#license1Number").val(), 
     "license1Year" : $("#license1Year").val() 


     }, function(respond){ 

      //Respond from PHP 
      //Maybe replace some div with the server respond? 
      $("#some_div").html(respond); //optional 
     }); 

    }); 

}); 

你问POST ASSOC ARRAY使用jQuery, 所以你会得到的是,

在你的PHP脚本:

<?php 

print_r($_POST); //will print what you want 

您可以使用.serializeArray(),然后手动编码值:

var values = form.serializeArray(); 
for (var i = 0; i < values.length; i++) 
    values[i] = encodeURIComponent(values[i].value); 
values = values.join('&'); 

一个可能的解决方案是解析服务器端密钥字符串并在PHP中构建相关数组...

我认为jQuery.param是你在找什么。

serializeArray() ;是你在找什么

+2

这个答案可以做得更详细一点... – ThiefMaster