[英]JavaScript cannot find JSON data from PHP json_encode
這里的想法是從MySQL數據庫表中自動加載(或完全加載)某些產品的索引頁面。
首先,我的PHP。
<?php
header('Content-Type: application/json');
require_once 'classloader.php';
$db = new Database();
$items = $db->getRows('SELECT * FROM products');
foreach($items as $eachItem){
$itemsJSON = new Item($eachItem->product_name, $eachItem->product_quantity, $eachItem->product_cost);
echo json_encode($itemsJSON);
}
這似乎工作得很好,並且為我的Item類提供了兩個正確編碼的JSON對象。
{"name":"Slippers","quantity":"3","cost":"4.00"}
{"name":"Gloves","quantity":"5","cost":"9.00"}
我的JavaScript看起來像這樣(以及許多其他類似的變體)
$(document).ready(function () {
$.post( "productloader.php", function( data ) {
$( "#result" ).html( data );
});
});
我不確定為什么它不起作用。 我不想使用$.getJSON()
因為沒有查詢字符串可以使用,所以我假設我需要$.post()
。
看來這是一個很常見的問題,但是我還沒有找到解決方案。 任何幫助,將不勝感激。 謝謝。
您不能單獨對每個項目進行json_encode()
。 您要發送到瀏覽器的數據不是有效的JSON,僅是有效JSON的許多小塊。 在循環內構建一個數組,然后對整個事情進行編碼。 另請參閱http://jsonlint.com/
<?php
header('Content-Type: application/json');
require_once 'classloader.php';
$db = new Database();
$items = $db->getRows('SELECT * FROM products');
foreach($items as $eachItem){
$itemsJSON[] = new Item($eachItem->product_name, $eachItem->product_quantity, $eachItem->product_cost);
}
echo json_encode($itemsJSON);
在AJAX
方法中,您要輸出多個JSON
字符串,而js端則需要1個字符串(data)
。 嘗試將for循環刪除為:
echo json_encode($items);
您將為每一行創建JSON,因此前端將為每一行獲取單獨的JSON對象。
您應該將所有行放入and數組中,並在循環外創建JSON對象,然后回顯編碼后的JSON字符串。
<?php
$allitem = $db->getRows('SELECT * FROM products');
$itemArr=array();
foreach($allitem as $item){
array_push( $itemArr , new Item($item->product_name, $item->product_quantity, $item->product_cost) );
}
echo json_encode($itemArr);
?>
要么
$allitem = $db->getRows('SELECT * FROM products');
echo json_encode($allitem );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.