Я передаю массив с 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. Но с вышесказанным, это не чтение массива.
Я не должен делать это правильно. Пожалуйста помоги.
Спасибо.
С помощью этого 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