在 JS 脚本中推送 PHP 数组

Posted

技术标签:

【中文标题】在 JS 脚本中推送 PHP 数组【英文标题】:Pushing PHP Array in a JS Script 【发布时间】:2021-12-04 23:40:55 【问题描述】:

这是我的第一篇文章,如果不是那么好,请向我道歉。

这是我的“area_chart.charts.php”数组所在的位置:

$data=array();
foreach ($result as $row) 
  $chartDate = date("d/m", strtotime($row['created_at']));
  $chartResultats = $row['traitements'];
  $chart = array("chartResultats" => $chartResultats,"chartDate" => $chartDate);
  array_push($data, $chart);

JSON 响应:https://prnt.sc/1whxygm

我正在尝试使用 Ajax 检索数据以将其与 Chart.JS 一起使用,但我这样做的方式不起作用。有人知道怎么做吗?

我想要的结果是:

chartResultats: [10, 30, 20]
chartDate: ["16/10", "16/10", "16/10"]

我尝试像这样使用 Ajax:

$.ajax(
url:"./inc/charts/area_chart.charts.php",
method:"GET",
success:function(data)  
console.log(data);
chartResultats = data["chartResultats"];
chartDate = data["chartDate"];

// Area Chart

var ctx = document.getElementById("chartResultats");
var myLineChart = new Chart(ctx, 
  type: 'line',
  data: 
    labels: [chartDate],
    datasets: [
      data: [chartResulats],
    ],

和 Fetch 但它没有成功。我的图表显示欠佳。

你能帮我或澄清一下吗? 提前致谢!

【问题讨论】:

请分享更多细节。 究竟是什么不适用于给定的代码?你有什么努力让它发挥作用? 【参考方案1】:

您没有说明如何输出 $data 数组以使其可用于 AJAX。

要将$data 输出为 JSON,您必须以 结束脚本,

header('Content-Type: application/json;charset=UTF-8');
print json_encode($data);
exit();

然后您可以使用浏览器打开charts.php 页面并检查JSON 输出。

但是,要获得所需的 JSON,您需要类似的东西,

$data=array(
    'chartResultats' => array(),
    'chartDate' => array(),
);

foreach ($result as $row) 
  $data['chartDate'][] = date("d/m", strtotime($row['created_at']));
  $data['chartResultats'][] = $row['traitements'];


header('Content-Type: application/json;charset=UTF-8');
print json_encode($data);
exit();

输出应该是这样的,


    "chartResultats": [10, 30, 20],
    "chartDate": ["16/10", "16/10", "16/10"]

在您发布的代码中,您在每次迭代时创建一个新字典,其中包含一个 chartResultats r 和一个 chartDate d(我们称之为 r: 1, d: 1 ):

$chart = array("chartResultats" => $chartResultats,"chartDate" => $chartDate);

然后你将这个对象推送到数据上,得到一个这样的对象数组:

array_push($data, $chart);

所以您的数据是 [ r: 1, d: 1 , r: 2, d: 2 , ... ](字典数组)而不是 r: [ 1, 2, ... ], d: [ 1, 2, ... ] (两个数组的字典)。

注意。

我认为这样,您已经正确格式化了两个数组;没有必要在成功回调中再次格式化它们。所以,试试

data: 
   labels: data["chartDate"],    // Not [chartDate]
   datasets: [
      data: data["chartResultats"],  // Not chartResultats
   ],

【讨论】:

我已经这样做了,我只是没有上传所有文件,但它已经是 JSON 类型,因为它给了我响应。您可以在屏幕截图中看到它! :) 抱歉:在“我需要的 JSON”中,您没有包含大括号或引号;在您生成和发布的 JSON 中,代码以错误的方式推送数据,作为数组中的对象。您需要添加到字典中的条目(请参阅此答案的第二部分)。 感谢您的回答。它现在不再显示未定义。它向我显示日期,但不是它必须的方式,并且“结果”也不会显示。截图:prnt.sc/1wivl38 @newcomerindev 嗯,我认为您可能过度使用了下标。添加注释。【参考方案2】:

或者你可以使用回声

echo json_encode($data);

【讨论】:

【参考方案3】:

LSerni 的回答可能会导致解决问题,因为它解决了我认为为解决问题chart is returning undefined 的前提中缺少的最重要的东西。

除此之外,我看到当您收到响应时,在您的 $.AJAX.success 函数中您只执行了一个可能会失败的分配,因为 data.chartResultatsdata.chartDate 未定义。相反,data 是一个包含 chartResultatschartDate 的对象数组。

chartResultats = data["chartResultats"];
chartDate = data["chartDate"];

因此,一种产生预期输出的解决方案(

chartResultats: [10, 30, 20]
chartDate: ["16/10", "16/10", "16/10"]

) 是迭代数据。这是一种实现:

var chartResultats = [];
var chartDate = [];
data.forEach(function(record)
  chartResultats.push(record.chartResultats);
  chartDate.push(record.chartDate);
);

【讨论】:

感谢您的回答。所以我按照你说的做了,现在它什么都没有显示。 :// 您解决了这个问题吗?什么不显示?你检查chartResultatschartDate 的内容了吗?如果您还为您的 PHP 代码实现了 LSerni 的解决方案来打印 JSON,那么我所说的就没有必要了。

以上是关于在 JS 脚本中推送 PHP 数组的主要内容,如果未能解决你的问题,请参考以下文章

使用 pine 脚本中的函数循环数组推送

接收推送通知两次 firebase PHP 脚本

苹果iOS推送通知的PHP脚本错误

这个 php 脚本是不是仍可用于使用 APNs 发送测试推送通知? [基于证书的连接]

如何在curl php中发送推送通知时获取注册ID

js脚本语言基础和数组