Using this PHP:
function handlePost() { $a = $_POST['favArray']; var_dump($a); }
.. and this Javascript:
function post() { var a1 = [ {"Item":"109249383", "Desc":"item1desc", "Remarks":"item1note"}, {"Item":"298298210", "Desc":"item2desc", "Remarks":"item2note"} ]; $.ajax({ type: "POST", url: "readArray.php", data: { favArray : a1 }, success: function() { alert1('ok, sent'); } }); }
... I get this output:
HTTP/1.1 200 OK Content-Type: text/html Server: Microsoft-IIS/7.5 X-Powered-By: PHP/5.3.10 Date: Wed, 11 Jul 2012 21:04:16 GMT Content-Length: 315 array(2) { [0]=> array(3) { ["Item"]=> string(9) "109249383" ["Desc"]=> string(9) "item1desc" ["Remarks"]=> string(9) "item1note" } [1]=> array(3) { ["Item"]=> string(9) "298298210" ["Desc"]=> string(9) "item2desc" ["Remarks"]=> string(9) "item2note" } }
In this case, the data encoding on the wire is not JSON . This is the "application / x-www-form-urlencoded" by default used by the jQuery ajax
function. Looks like that:
favArray=%5B%7B%22Item%22%3A%22109249383%22%2C%22Desc%22%3A%22item1desc%22%2C %22Remarks%22%3A%22item1note%22%7D%2C%7B%22Item%22%3A%22298298210%22%2C%22 Desc%22%3A%22item2desc%22%2C%22Remarks%22%3A%22item2note%22%7D%5D
(all on one line)
Therefore, it makes no sense to call json_decode
in PHP - JSON has never been involved. PHP automatically decrypts the body of the message with URL encoding.
If you want to encode JSON, you can directly use JSON.stringify()
. This may require json2.js
on the browser side. (see this answer )
To use JSON, you need something like this in the browser:
function post_json_encoded() { $.ajax({ type: "POST", url: "postArray.php", contentType: 'application/json', // outbound header dataType: 'text', // expected response data: JSON.stringify(a1), // explicitly encode success: function() { alert1('ok, json sent'); } }); }
... and then something like this on the php side:
function handlePost() { header('Content-Type: text/plain; charset="UTF-8"'); $post_body = file_get_contents('php://input'); $a = json_decode($post_body); var_dump($a); }
In this case, the on-wire view is as follows:
[{"Item":"109249383","Desc":"item1desc","Remarks":"item1note"}, {"Item":"298298210","Desc":"item2desc","Remarks":"item2note"}]
... and the output of php var_dump:
array(2) { [0]=> object(stdClass)#1 (3) { ["Item"]=> string(9) "109249383" ["Desc"]=> string(9) "item1desc" ["Remarks"]=> string(9) "item1note" } [1]=> object(stdClass)#2 (3) { ["Item"]=> string(9) "298298210" ["Desc"]=> string(9) "item2desc" ["Remarks"]=> string(9) "item2note" } }