第一次提出问题:)


所以我有一个HTML页面,它从下拉菜单中获取数字值并尝试使用它们来填充Google Chart。这是使用Javascript函数


 函数displayChart(){
 var sct = document.getElementById(“sct”)。value;
 var ind = document.getElementById(“ind”)。value;
 var spc = document.getElementById(“spc”)。value;
 var sub = document.getElementById(“sub”)。value;

 if(sub ==“”){
 document.getElementById(“myChart”).innerHTML =“”;
返回;
 } else {
 if(window.XMLHttpRequest){
 // IE7 +,Firefox,Chrome,Opera,Safari和#xA的代码xmlhttp = new XMLHttpRequest();
 } else {
 // IE6,IE5和#xA的代码xmlhttp = new ActiveXObject(“Microsoft.XMLHTTP”);
 }
 xmlhttp.onreadystatechange = function(){
 if(this.readyState == 4&& this.status == 200){
 document.getElementById(“myChart”).innerHTML = this.responseText;
 }
 };

 xmlhttp.open(“GET”,“chart.php?sct =”+ sct +“& ind =”+ ind +“& spc =”+ spc +“& sub =”+ sub,true);
 xmlhttp.send();
 }
}



 这链接到一个php页面,该页面使用作为MySQL语句的一部分传递的变量:


 $ sct = intval ['sct'];
 ...
 ...
 ...&#xA ;
 function get_transactions(){
 $ purchases_sql_stmt =“SELECT CT_Purchases FROM Company_Transactions WHERE CT_Sector = $ sct&& CT_Industry = $ ind&& CT_Specoality = $ spc&& CT_Subspeciality = $ sub”;
}
 代码>


 我希望这个函数可以在PHP文件的脚本标记中调用,该文件包含创建Google图表所需的所有必要代码。


 //加载Visualization API和饼图包。
 google.charts.load('current',{
'packages ':['bar']
});

 //设置回调,以便在加载Google Visualization API时运行。
 google.charts.setOnLoadCallback(drawChart); 

 //创建和填充数据表的回调,
 //实例化饼图,传入数据和
 //绘制它。
&#xA ; function drawChart(){
 //创建数据表。

 var data =<?php echo json_encode(get_transactions()); ?取代;
 var years = data [0];
 var sales = data [1];
 var purcha = data [2];
 var tableArray = new Array();

 for(var i = 0; i< data [0] .length; i ++){
 tableArray.push(new Array())
 tableArray [i] .push([Number(years [i]),Number(sales [i]),Number(purchases [i])])
 }

 var table = new google.visualization.DataTable();
 table.addColumn('number','Year');
 table.addColumn('number','Sales');
 table.addColumn('number','Purchases');

 for(var i = 0; i< tableArray.length; i ++){
 table.addRow(tableArray [i] [0],tableArray [i] [1],tableArray [i] [2]);
 }


 //设置图表选项
 var options = {
图表:{
标题:“男士服装店销售”,
 },
 hAxis:{
格式:''
 },
宽度:640,
身高:320
 };

 //实例化并绘制我们的图表,传递一些选项。
 var chart = new google.charts.Bar(document.getElementById(“columnchart_material”));
 chart.draw(table,google.charts.Bar.convertOptions(options));
}



 事情是,我已经尝试在一个单独的PHP页面上使用这个确切的代码,其中MySQL语句中的值已被硬编码以创建结果,整个过程完美无缺。我也能够确定调用页面不是问题,因为我已经能够在其中执行回声。问题似乎是在使用xmlhttp.open()调用页面后,将忽略chart.php中的脚本标记。是否有特定原因,如果有,我该如何解决?非常感谢:)

答案 0 :(得分:0)
你应该不要在通过JS中的XHR / ajax调用的PHP文件中使用javascript !相反,使用PHP在PHP文件中执行相同的操作,或者单独评估JS端的发送/接收数据。 PHP文件中的JS脚本(由Xmlhttprequest调用)将无法按预期运行。您也没有检索任何GET变量,这就是您的查询无法正常工作的原因。
$sct = intval[ 'sct' ];
这应该是:
$sct = $_GET['sct'];
您正在使用xmlhttprequest发送所有信息(使用$ _GET),但似乎没有在SQL之前使用$ var = $ _GET设置变量。
此外,您的功能不会:
1)接受vars作为参数
2)没有全球化$ _GET vars
这意味着您的函数(其中包含SQL)当前无法查看(或使用,评估等)实际函数上方的任何变量(例如$ sct)。
请更新所有内容,让我知道你找到了什么:)
...示例
$sct = $_GET['sct'];
function sqlStuff(){
global $sct;
// sql stuff here...
}
sqlStuff();
例2 ......
$sct = $_GET['sct'];
$blah = $_GET['blah'];
function sqlStuff($getVar, $getVar2){
// sql stuff here...
}
sqlStuff($sct, $blah);