How to pass multi-dimensional array with Jquery AJAX post?
Jquery will take multi dimensional arrays directly, no need to serialize.
var data = { foo: 123, bar: 456, rows: [ { column1 : 'hello', column2 : 'hola', column3 : 'bonjour', }, { column1 : 'goodbye', column2 : 'hasta luego', column3 : 'au revoir', }, ], test1:{ test2: { test3: 'baz' } }};
_Post Data in your PHP file would look like this
Array ( [foo] => 123 [bar] => 456 [rows] => Array ( [0] => Array ( [column1] => hello [column2] => hola [column3] => bonjour ) [1] => Array ( [column1] => goodbye [column2] => hasta luego [column3] => au revoir ) ) [test1] => Array ( [test2] => Array ( [test3] => baz ) ) )
Once you define your data multidimensional array, your Ajax could be as simple as
$.ajax({ type: 'post', cache: false, url: './ajax.php', data: data });
If your post array may have fields that you don't know about, you can access your Post array in your php file easily with
$data = file_get_contents('php://input');$data = json_decode($data, true);
I did not find any good solution, so i solved this using JSON.stringify();here is my code
Client side :
var data = {a:{'foo':'bar'},b:{'this':'that'}};$.ajax({ url : '/', type : 'POST', data : {'data':JSON.stringify(data)}, success : function(){ } });
Server Side:
$data = json_decode($_POST['data']);print_r($data);// Result:// Array( "a" => Array("foo"=> "bar"), "b" => Array("that" => "this"))