Я создаю форму с использованием формы cakephp. Он создает форму примерно так:
<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(); });
благодаря
Не нужно пользователю низкоуровневого 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 (); это то, что вы ищете