簡體   English   中英

JavaScript無法從PHP json_encode找到JSON數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM