【问题标题】:Sending PHP array to JavaScript issue将 PHP 数组发送到 JavaScript 问题
【发布时间】:2016-10-13 10:29:42
【问题描述】:

我有一个 AJAX POST 函数,它运行一个查询 MySQL 数据库的 PHP 文件。它使用 MySQL 中的“CONCAT”选项,然后将接收到的每一行添加到一个数组中。我需要将该数组从 PHP 转换为 JavaScript,我该怎么做呢?

我已经尝试查找它,但没有发现我不明白如何实际实现它,或者它完全不起作用。

$sql_query = substr($sql, 0, -3);

$result = $connection->query($sql_query);

if (!$result) {
    die("Invalid Query: " . mysqli_error());
}

$rowCount = mysqli_num_rows($result);

echo "Total Bans: " . $rowCount . "\r\n";
echo "\r\n";

$bans = [];

while ($row = $result->fetch_row()) {
    for ($x = 0; $x < $rowCount; $x++) {
        array_push($bans, $row[$x]);
    }
}

如果你需要的话,我已经包含了我的 PHP 代码的那部分。

我试过了:

echo(json_encode($bans));

.

      success: function(data) {
          document.getElementById('outputtext').innerHTML = '';
          var array = new Array();
          array = data;
          document.getElementById('outputtext').innerHTML = array;
      }

这会返回所有内容,但会在它们之间添加很多“,”。

数组中的索引示例:

[05-18] 代达罗斯因EXAMPLE_REASON禁止EXAMPLE_USERNAME(EXAMPLE_GUID/EXAMPLE_IP)

我希望将 $bans 数组中的所有行放入 JavaScript 中的数组中。

【问题讨论】:

  • 你能打印出你从 echo(json_encode($bans)) 得到的结果吗?声明,那么只有我们会有一些想法来给出好的逻辑
  • 您在 html 中打印数组。这正是你想要的 o/p 吗?详细说明你的输出。
  • 我明白了:["[05-18] 代达罗斯禁止EXAMPLE_GUID \/EXAMPLE_IP) 用于EXAMPLE_REASON",null,null,null,null,null,null,null,null, null,null,null,null,null,null,null,null,null,null,"[05-18] Daedalus 禁止 TEST_SPACE_USERNAME (TEST_SPACE_GUID \/ TEST_SPACE_IP ) 为 TEST_REASON_SPACE ",null,null,null,null,null,null ,null,null,null,null,null,null,null,null,null,null,null,null, 一遍又一遍
  • @suresh:我想单独输出每一行,因为我遇到了一个问题,只是让 PHP 打印出数组中的每个索引。当我有 PHP 输出时,我将 "\r\n" 添加到 echo 语句的末尾,但它会根据索引的数量添加一个新行。因此,如果有 18 行,它将在每行之后添加 18 行。

标签: javascript php mysql arrays ajax


【解决方案1】:

当您使用 echo(json_encode($bans)); 将 php 数组转换为 json 数组时。要在 javascript 中使用 json,您应该首先像这样解析该数组

success : function(data){
    result      =   JSON.parse(data) ;  
}

现在你检查这个数据console.log(result); 通过这样的键访问特定数据

name = result.name;

【讨论】:

  • 我试过了,但这是我得到的输出:[05-18] Daedalus 禁止EXAMPLE_USERNAME(EXAMPLE_GUID /EXAMPLE_IP) 用于EXAMPLE_REASON,,,,,,,,,,,,,,, ,,,,[05-18] Daedalus 禁止 TEST_SPACE_USERNAME (TEST_SPACE_GUID / TEST_SPACE_IP ) 为 TEST_REASON_SPACE ,,,,,,,,,,,,,,,,,,, 等等。
  • 来自 PHP:echo(json_encode($bans));然后在 JS 中:success: function(data) { document.getElementById('outputtext').innerHTML = '';结果 = JSON.parse(数据); document.getElementById('outputtext').innerHTML = 结果; }(对不起,我不知道如何正确格式化cmets中的代码)
  • 请分享您的确切 json 数组或您从 php 文件返回到 ajax 函数的代码
  • 没有 JSON 数组,代码的工作方式是从 MySQL 获取返回,然后将该字符串添加到数组中。我已经包含了从 PHP 返回的代码。
  • 当您从 php 文件返回数据时。你应该只回显 echo(json_encode($bans)); ,你也返回 'echo "Total Bans:" 。 $rowCount 。 "\r\n";回声“\r\n”;'请删除它,请打开您的控制台并检查从 php 文件返回的数据。 (按 f12 键并转到控制台选项卡)
【解决方案2】:

你代码中的这个地方是错误的:

while ($row = $result->fetch_row()) {
    for ($x = 0; $x < $rowCount; $x++) {
        array_push($bans, $row[$x]);
    }
}

因为您使用while 循环记录低谷记录,并使用for 再次循环记录。仅使用while:

while ($row = $result->fetch_row()) {
   array_push($bans, $row);
}

将提取所有行且不包含空值。

如果你从数据库返回的只有一列,你应该使用:

while ($row = $result->fetch_row()) {
       array_push($bans, $row[0]);
    }

【讨论】:

  • 当前代码完全符合我的要求,而您的代码所做的只是返回“Array”(我可能做错了什么)
  • 它应该返回数组数组。 row 本身是一个数组,您将整个数组推入 $bans 数组。如果您的回复中只有一列,您可以使用:array_push($bans, $row[0]);@Daedalus 如果我理解正确,我已经用代码更新了您的确切情况的答案
  • 我真的不明白主要问题是什么。它按应有的方式工作。我遇到的主要问题是 PHP 在回显到 JS 时决定添加多个新行。如果数组中有 5 个索引,对于每个 echo,它会添加 5 个新行,我不知道。
  • 好的,我明白你的意思了。我认为这是我遇到问题的根本原因。
  • 主要问题是你拉数据的概念是错误的。 while ($row = $result-&gt;fetch_row()) {} 将遍历所有 ROWS,在这句话中:for ($x = 0; $x &lt; $rowCount; $x++) {array_push($bans, $row[$x]);} 您访问的是某个行列 NOT $x ROW。简而言之,变量$row 在您的情况下是某些行列的数组,而不是ROWS 数组。因此,您尝试访问每一行的 0、1、2、3、4 列,并且只存在 0 列,这就是为什么您会得到 4 个 null 索引
猜你喜欢
  • 2014-09-22
  • 1970-01-01
  • 2012-12-14
  • 2017-06-17
  • 1970-01-01
  • 2018-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多