【问题标题】:Load data from table using PHP & AJAX使用 PHP 和 AJAX 从表中加载数据
【发布时间】:2017-12-07 03:47:38
【问题描述】:

我正在尝试使用 PHP 和 AJAX 从表中检索数据,目前我能够以 json 格式显示我的查询结果,我想要做的是从该数组中选择一个特定的数据,对于例如我得到这个数组:

{data: [{IdProduct: "1", Name: "Name here..........",...}]}

例如,我只想选择名称,我尝试这样做:

function LoadProductos() {

$.ajax({
    url: '../../class/loadProd.php',
    method: 'POST',
    success: function (data) {
      var aRC = JSON.parse(data);

      for (var i = 0; i < aRC.length; i++) {
        console.log(aRC[i].Name);
      }
    }

  });
}

但这并没有显示任何内容,我该怎么做?这是我的 PHP 代码:

while($row = mysqli_fetch_array($registros)) {

    $table.='{
        "IdProduct":"'.$row['IdProduct'].'",
        "Name":"'.$row['Name'].'",
        "Description":"'.$row['Description'].'",
        "ImagePath":"'.$row['ImagePath'].'"
    },';

    $table = substr($table, 0, strlen($table) -1);

    echo '{"data":['.$table.']}';
}

【问题讨论】:

  • 您尝试在返回时解析 JSON 数据,但您没有在 PHP 中创建有效的 JSON 数据。使用json_encode(),永远不要尝试自己编写 JSON 代码。
  • 不要构建自己的 json-string。只需创建一个 PHP 数组并使用 json_encode() 对其进行编码。
  • 最后两行($table = ... 和 echo ...)应该在循环之后。
  • 建议: 而不是substr($table, 0, strlen($table) -1),修剪字符串:trim($table, ',')。 (在其他情况下,也就是。这里你仍然应该使用 json:encode(),如前所述)。
  • 好的,现在我明白了!我是 PHP 新手,有一件事......我如何将 json_encode() 与我当前的代码一起使用?

标签: javascript php jquery mysql ajax


【解决方案1】:

您需要在代码中更改一些内容,例如:

  • 这不是您应该创建 json 字符串的方式。在while() 循环之前创建一个空数组,并在循环的每次迭代中将行详细信息附加到该数组。退出循环后,只需将 json_encode() 函数应用于结果数组即可得到最终的 json 字符串。

    $table = array();
    while($row = mysqli_fetch_array($registros)) {
        $table[]= array(
            'IdProduct' => $row['IdProduct'],
            'Name' => $row['Name'],
            'Description' => $row['Description'],
            'ImagePath' => $row['ImagePath']
        );
    }
    echo json_encode($table);
    
  • 由于您期望来自服务器的 json 字符串,请将此设置 dataType:'json' 添加到您的 AJAX 请求中。 dataType 是您期望从服务器返回的数据类型。而在success()回调函数中,只需循环json结果即可获取相关数据。

    function LoadProductos() {
        $.ajax({
            url: '../../class/loadProd.php',
            method: 'POST',
            dataType: 'json',
            success: function (data) {
                for (var i = 0; i < data.length; i++) {
                    alert(data[i].Name);
                }
            }
        });
    }
    

【讨论】:

  • 我进行了更改,但现在我没有得到任何类型的信息(来自 echo json_encode),也没有错误消息
  • @User1899289003 这里要调试几件事,1) 你调用了这个LoadProductos() 函数吗? 2) 在success 回调函数中执行alert(data);,看看你得到了什么。
  • 是的!我正在调用我的函数并且我警告(数据),我还打开浏览器控制台以查看发生了什么并且该函数执行得很好,但是在预览/响应窗口中什么都没有,我将 echo json_encode($table) 更改为 echo “你好”并且工作正常。
  • @User1899289003 将您的 jQuery/AJAX 和 PHP 代码粘贴到 pastebin.com 并在此处提供链接。
  • @User1899289003 您没有在 AJAX 请求中包含 dataType: 'json' 设置。实际上有两种方法可以达到你想要的结果,这里列出了两种方法(LoadProductos函数),https://pastebin.com/WxuTffZh
【解决方案2】:

首先,您不应该在循环中回显 json 数据 in。它应该在循环之外。 您也不应该构建自己的 json 数据。

让我们构建一个看起来像您想要的 json 响应的数组。然后我们将使用函数json_encode() 将其编码为正确的json-string:

// Define the response array
$response = [
    'data' => []
];

while($row = mysqli_fetch_array($registros)) {

    // Push a new array to 'data' array
    $response['data'][] = [
        'IdProduct'   => $row['IdProduct'],
        'Name'        =>.$row['Name'],
        'Description' => $row['Description'],
        'ImagePath'   => $row['ImagePath']
    ];
}

// Now, let's encode the data:
echo json_encode($response);

【讨论】:

  • 我也试过这个,但我从上面的答案中得到了错误。
  • @User1899289003 检查您的服务器错误日志,看看它是否说明了什么。你在哪个 PHP 版本/操作系统上运行它?
  • 没有错误信息或日志,我用的是PHP 5.6.30
【解决方案3】:

在你的PHP文件中根据这个进行更改:-

$outp = array();
$outp = $res->fetch_all(MYSQLI_ASSOC);

为了确保 json_encode 不返回 null

function utf8ize($d) {
 if (is_array($d)) {
    foreach ($d as $k => $v) {
        $d[$k] = utf8ize($v);
    }
} else if (is_string ($d)) {
    return utf8_encode($d);
}
return $d;
}
echo json_encode(utf8ize($outp));

你的 JavaScript 没问题 你只需要更改 PHP 中的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 2015-08-16
    • 1970-01-01
    • 2017-09-17
    相关资源
    最近更新 更多