使用 PHP 获取 SQL 数据,然后将数组发送到 Javascript

Posted

技术标签:

【中文标题】使用 PHP 获取 SQL 数据,然后将数组发送到 Javascript【英文标题】:Grabbing SQL data using PHP then sending Array to Javascript 【发布时间】:2014-07-25 01:52:00 【问题描述】:

我试图弄清楚如何将我使用 php 提取的 SQL 数据解析为 javascript 文件。

我需要将 PHP 数组存储到 java 中,因为我有一个使用 javascript 数组填充数据的图表。

现在我有一个刷新我的图表数据的按钮,当它被点击时,它会调用这个包含在我的主 html 文件中的 javascript:

button.js

$(function()
$('#refreshchart').click(function() 
        var chart = $('#chart').highcharts();
        chart.series[0].setData(dataarray);
    );
); 

Java 数组“dataarray”需要从 SQL 数据库中提取。

我有一个从数据库中提取所需数据的 PHP 脚本。

这是我的 PHP 脚本:

查询.php

<?php
include 'dbcon.php';
$query0 = "SELECT count(*) FROM test WHERE ans=0";
$query1 = "SELECT count(*) FROM test WHERE ans=1";
$query2 = "SELECT count(*) FROM test WHERE ans=2";
$query3 = "SELECT count(*) FROM test WHERE ans=3";
$query4 = "SELECT count(*) FROM test WHERE ans=4";
$query5 = "SELECT count(*) FROM test WHERE ans=5";
$query6 = "SELECT count(*) FROM test WHERE ans=6";
$query7 = "SELECT count(*) FROM test WHERE ans=7";
$query8 = "SELECT count(*) FROM test WHERE ans=8";
$query9 = "SELECT count(*) FROM test WHERE ans=9";

$result0 = $mysqli->query($query0) or die($mysqli->error.__LINE__);
$result1 = $mysqli->query($query1) or die($mysqli->error.__LINE__);
$result2 = $mysqli->query($query2) or die($mysqli->error.__LINE__);
$result3 = $mysqli->query($query3) or die($mysqli->error.__LINE__);
$result4 = $mysqli->query($query4) or die($mysqli->error.__LINE__);
$result5 = $mysqli->query($query5) or die($mysqli->error.__LINE__);
$result6 = $mysqli->query($query6) or die($mysqli->error.__LINE__);
$result7 = $mysqli->query($query7) or die($mysqli->error.__LINE__);
$result8 = $mysqli->query($query8) or die($mysqli->error.__LINE__);
$result9 = $mysqli->query($query9) or die($mysqli->error.__LINE__);

$row0 = $result0->fetch_row();
$row1 = $result1->fetch_row();
$row2 = $result2->fetch_row();
$row3 = $result3->fetch_row();
$row4 = $result4->fetch_row();
$row5 = $result5->fetch_row();
$row6 = $result6->fetch_row();
$row7 = $result7->fetch_row();
$row8 = $result8->fetch_row();
$row9 = $result9->fetch_row();

echo "Number of people that chose A: ", $row1[0];
echo "<br>Number of people that chose B: ", $row2[0];
echo "<br>Number of people that chose C: ", $row3[0];
echo "<br>Number of people that chose D: ", $row4[0];
echo "<br>Number of people that chose E: ", $row5[0];
echo "<br>Number of people that chose F: ", $row6[0];
echo "<br>Number of people that chose G: ", $row7[0];
echo "<br>Number of people that chose H: ", $row8[0];
echo "<br>Number of people that chose I: ", $row9[0];
echo "<br>Number of people that chose J: ", $row0[0];
$array = array($row1[0],$row2[0],$row3[0],$row4[0],$row5[0],$row6[0],$row7[0],$row8[0],$row9[0],$row0[0]);
echo json_encode($array);
?>

现在我知道我必须使用 json 对 PHP 数组进行编码,以便正确格式化,并且我可能必须使用 AJAX 调用 PHP 脚本来获取数据。

这是我卡住的地方,我不知道如何获取结果并将它们解析到 java 数组中,以便可以使用 SQL 数据库中的结果更新图表。

任何帮助将不胜感激!

谢谢, 克里斯托弗

【问题讨论】:

【参考方案1】:

如果您想通过 ajax 调用您的 php 代码,请尝试:

$(function()
var chart = $('#chart').highcharts();
$('#refreshchart').click(function() 
        $.ajax(
           type: "GET",
           url: "some.php",
           success: function(data) 
               chart.series[0].setData($.parseJSON(data));
           
        );
    );
);

只需将“some.php”设置为您的 php 文件名。

【讨论】:

这正是我需要做的,对于 some.php 文件,它将如何格式化?我可以按照我有 query.php 的方式保持它吗? 忽略了您提供的文件名...您的 query.php 文件的 json 编码数组应该可以工作 ;) 但您必须忽略阵列之前的所有回声部分 ajaxcall 通过您的 php 文件获取所有输出,该文件只能是 json 编码的数组,作为字符串,然后调用成功函数。由您的 php 文件生成的字符串将作为第一个参数传递给成功函数。我称为“数据”的参数名称完全无关紧要。您只需要确保在 parseJSON() 部分中使用相同的名称。 看起来有点工作,但它没有正确地将数据加载到 highcharts 中。嗯。【参考方案2】:
<script>
var contants = <?php echo json_encode($array); ?>
</script>

然后将其转换为数组。 jQuery 的 $.parseJSON(string) 可能会有所帮助。

【讨论】:

我有一个绘制按钮的 HTML 文件,该 HTML 文件包含了 javascript。 PHP 文件没有链接到任何东西,因此 javascript 文件无法与 PHP 文件对话。我需要制作 javascript 文件(包含的 .js)来与 PHP 文件对话。我假设我需要使用 AJAX。【参考方案3】:

如果可能,请避免在代码中编写动态 JavaScript,为此使用 web 服务,您可以使用 jQuery 通过 AJAX 调用获取此数据。

$.ajax(
  url: "query.php",
  data:  json: "on" ,
).done(function(data) 
  console.log(data);
  alert("found " + data.length + " elements" + "\n" + "first one: " + data[0].name + " = " + data[0].total);
);

我更喜欢这样写:

<?php
include 'dbcon.php';

$query =
    "SELECT 'A' AS name,count(*) AS total FROM test WHERE ans=0 UNION " .
    "SELECT 'B' AS name,count(*) AS total FROM test WHERE ans=1 UNION " .
    "SELECT 'C' AS name,count(*) AS total FROM test WHERE ans=2 UNION " .
    "SELECT 'D' AS name,count(*) AS total FROM test WHERE ans=3 UNION " .
    "SELECT 'E' AS name,count(*) AS total FROM test WHERE ans=4 UNION " .
    "SELECT 'F' AS name,count(*) AS total FROM test WHERE ans=5 UNION " .
    "SELECT 'G' AS name,count(*) AS total FROM test WHERE ans=6 UNION " .
    "SELECT 'H' AS name,count(*) AS total FROM test WHERE ans=7 UNION " .
    "SELECT 'I' AS name,count(*) AS total FROM test WHERE ans=8 UNION " .
    "SELECT 'J' AS name,count(*) AS total FROM test WHERE ans=9";

$result = $mysqli->query($query) or die($mysqli->error.__LINE__);

$rows = $result->fetch_all(MYSQLI_ASSOC);

$print_json = !empty($_GET['json']) && $_GET['json']=='on'; // your content negotiation logic here

if ($print_json) 
    header('Content-Type: application/json');
    echo json_encode($rows);
 else 
    foreach ($rows as $row) 
        echo "Number of people that chose $row['name']: $row['total']";
    

这样您就拥有更多的控制权和更简洁的代码。不过,我认为您的代码改进了 SQL。

【讨论】:

是的,优化了很多,但是我仍然需要使 javascript 文件(我的 HTML 页面中包含的 .js)与 PHP 文件对话以获取结果并允许数组在包含的 JS 中使用。我假设我需要使用 AJAX。 @Christopher 没错。我已更新代码以使用 json 变量和 AJAX 调用示例。 嗯,使用您编码的内容和@jhinzmann 建议的帖子有什么区别 - 我现在唯一的问题是,test.php 需要什么格式? ajax 函数如何从 test.php 中获取 var?我正在尝试了解它的工作方式。 我所做的 AJAX 调用只是显示了它是如何进行简单调用的,他的代码准确地显示了如何集成到您的 Highcharts 使用中。【参考方案4】:

此代码正在运行

var str_array=[];

function something()

    str_array= <?php echo json_encode($array); ?>;
    alert(str_array);`

【讨论】:

我的 javascript 文件是一个包含在我的主 HTML 文件中的 .js,因此我不能在我的 .js 文件中使用 PHP 标记,因为 JS 是在客户端运行的。 我想我有点困惑。我有一个绘制按钮的 HTML 文件,该 HTML 文件包含 javascript。 PHP 文件没有链接到任何东西,因此 javascript 文件无法与 PHP 文件对话。 不..我是那个困惑的人..如果你的 php 在另一个文件中,那么你不需要你的 java 脚本......并且在你最后调用你的 php..的?> 键入该代码,您可以访问该变量..我给了您您要问的语法..这不再是我的问题了 问题已通过使用 AJAX 对 query.php 使用 GET 解决 - 感谢您的输入。

以上是关于使用 PHP 获取 SQL 数据,然后将数组发送到 Javascript的主要内容,如果未能解决你的问题,请参考以下文章

使用 jquery ajax 将 javascript 数组变量发送到 php 脚本(获取字符串作为输出而不是数组)

将 SELECT @ 变量从 SQL 发送到 PHP

你如何将数组与许多元素比较到PHP中的数据库?

将数据从 javascript forEach 循环中的 php 数组发送到 ajax 调用的 url

如何使用索引号将数据发送到mysqli(准备好的语句)

将数据从 PHP 脚本发送到 iOS