PHP reads Javascript array

I am passing an array with Javascript to a PHP page as shown below.

var arrF1 = [{"Item":"item1no", "Desc":"item1desc", "Remarks":"item1note"}, {"Item":"item2no", "Desc":"item2desc", "Remarks":"item2note"} ]; $.ajax({ type: "POST", url: "http://www.mydomain.com/pdfs/flist.php", data: { favArray : arrF1 }, success: function() { alert('ok, sent'); } }); 

On my PHP page, I read the array as shown below.

 $fArray = json_decode($_POST['favArray']) 

And I tried to access the value of arrays like this.

 $fArrav[0]->{'Item'} $fArrav[0]->{'Desc'} $fArrav[1]->{'Item'} 

It is right? I am creating a pdf file on the server using FPDF. But with the above, it does not read the array.

I must not do it right. Please, help.

Thanks.

+6
source share
3 answers

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" } } 
+3
source
 $fArray = $_POST['favArray']; echo $fArray[0]['Item']; // item1no echo $fArray[1]['Item']; // item2no 
+1
source

NO for optional brackets:

 $fArrav[0]->Item 
0
source

Source: https://habr.com/ru/post/920267/


All Articles