PHP читает массив Javascript

Я передаю массив с Javascript на страницу PHP, как показано ниже.

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'); } }); 

На моей странице PHP я читал массив, как показано ниже.

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

И я попытался получить доступ к значению массивов, как это.

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

Это верно? Я создаю PDF-файл на сервере, используя FPDF. Но с вышесказанным, это не чтение массива.

Я не должен делать это правильно. Пожалуйста помоги.

Спасибо.

Related of "PHP читает массив Javascript"

С помощью этого PHP:

 function handlePost() { $a = $_POST['favArray']; var_dump($a); } 

.. и этот 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'); } }); } 

… Я получаю этот вывод:

 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" } } 

В этом случае кодирование данных на проводе не является JSON . Это «application / x-www-form-urlencoded» согласно стандарту, используемому функцией ajax jQuery. Выглядит так:

 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 

(все на одной линии)
Поэтому не имеет смысла вызывать json_decode в PHP – никогда не было задействовано JSON. PHP автоматически расшифровывает тело сообщения с кодировкой URL.


Если вы хотите кодировать JSON, вы можете JSON.stringify() использовать JSON.stringify() . Для этого может потребоваться json2.js на стороне браузера. (см. этот ответ )

Чтобы использовать JSON, вам понадобится нечто подобное в браузере:

 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'); } }); } 

… а затем что-то вроде этого на стороне php:

 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); } 

В этом случае представление on-the-wire выглядит следующим образом:

 [{"Item":"109249383","Desc":"item1desc","Remarks":"item1note"}, {"Item":"298298210","Desc":"item2desc","Remarks":"item2note"}] 

… и вывод 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" } } 
 $fArray = $_POST['favArray']; echo $fArray[0]['Item']; // item1no echo $fArray[1]['Item']; // item2no 

Нет необходимости в дополнительных кронштейнах:

 $fArrav[0]->Item