Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript无法从PHP JSON_encode中找到JSON数据_Javascript_Php_Json_Ajax - Fatal编程技术网

JavaScript无法从PHP JSON_encode中找到JSON数据

JavaScript无法从PHP JSON_encode中找到JSON数据,javascript,php,json,ajax,Javascript,Php,Json,Ajax,这里的想法是使用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){ $itemsJS

这里的想法是使用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);
}
我的JavaScript看起来像这样,还有许多其他类似的变体

$(document).ready(function () {
    $.post( "productloader.php", function( data ) {
        $( "#result" ).html( data );
    });
});
我不知道为什么它不起作用。我不想使用$.getJSON,因为没有可使用的查询字符串,所以我假设我需要$.post

这似乎是一个相当普遍的问题,但我还没有找到解决办法。任何帮助都将不胜感激。谢谢。

您不能对每个项目单独编码。发送到浏览器的数据不是有效的JSON,只是一个接一个的有效JSON的许多小块。在循环中构建一个数组,然后对整个过程进行编码。另见

在AJAX方法中,输出多个JSON字符串,而js端需要1个字符串数据。尝试删除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);
?>

您是否在浏览器控制台中观看了AJAX请求/响应?是否有任何错误?一旦AJAX请求从echo json_encode$itemsJSON;接收到第一个成功结果;,它停止侦听响应,并且在JavaScript中会忽略foreach循环的所有后续迭代。您需要将每个项添加到一个数组中,然后返回经过json_编码的完整数组。我认为不应该在循环中包含此项:json_encode$itemsJSON-它应该在外部。
echo json_encode($items);
<?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 );