在从html文件调用的php文件中忽略<script>标记

时间:2018-04-10 22:25:51

标签: javascript php html xml xmlhttprequest

第一次提出问题:)

&#xA;&#xA;

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

&#xA;&#xA;
 函数displayChart(){&#xA; var sct = document.getElementById(“sct”)。value;&#xA; var ind = document.getElementById(“ind”)。value;&#xA; var spc = document.getElementById(“spc”)。value;&#xA; var sub = document.getElementById(“sub”)。value;&#xA;&#xA; if(sub ==“”){&#xA; document.getElementById(“myChart”).innerHTML =“”;&#xA;返回;&#XA; } else {&#xA; if(window.XMLHttpRequest){&#xA; // IE7 +,Firefox,Chrome,Opera,Safari和#xA的代码xmlhttp = new XMLHttpRequest();&#xA; } else {&#xA; // IE6,IE5和#xA的代码xmlhttp = new ActiveXObject(“Microsoft.XMLHTTP”);&#xA; }&#XA; xmlhttp.onreadystatechange = function(){&#xA; if(this.readyState == 4&amp;&amp; this.status == 200){&#xA; document.getElementById(“myChart”).innerHTML = this.responseText;&#xA; }&#XA; };&#XA;&#XA; xmlhttp.open(“GET”,“chart.php?sct =”+ sct +“&amp; ind =”+ ind +“&amp; spc =”+ spc +“&amp; sub =”+ sub,true);&#xA; xmlhttp.send();&#XA; }&#xA;}&#xA;  
&#xA;&#xA;

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

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

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

&#xA;&#xA;
  //加载Visualization API和饼图包。&#xA; google.charts.load('current',{&#xA;'packages ':['bar']&#xA;});&#xA;&#xA; //设置回调,以便在加载Google Visualization API时运行。&#xA; google.charts.setOnLoadCallback(drawChart); &#xA;&#xA; //创建和填充数据表的回调,&#xA; //实例化饼图,传入数据和&#xA; //绘制它。&#xA;&#xA ; function drawChart(){&#xA; //创建数据表。&#xA;&#xA; var data =&lt;?php echo json_encode(get_transactions()); ?取代;&#XA; var years = data [0];&#xA; var sales = data [1];&#xA; var purcha = data [2];&#xA; var tableArray = new Array();&#xA;&#xA; for(var i = 0; i&lt; data [0] .length; i ++){&#xA; tableArray.push(new Array())&#xA; tableArray [i] .push([Number(years [i]),Number(sales [i]),Number(purchases [i])])&#xA; }&#XA;&#XA; var table = new google.visualization.DataTable();&#xA; table.addColumn('number','Year');&#xA; table.addColumn('number','Sales');&#xA; table.addColumn('number','Purchases');&#xA;&#xA; for(var i = 0; i&lt; tableArray.length; i ++){&#xA; table.addRow(tableArray [i] [0],tableArray [i] [1],tableArray [i] [2]);&#xA; }&#XA;&#XA;&#XA; //设置图表选项&#xA; var options = {&#xA;图表:{&#xA;标题:“男士服装店销售”,&#xA; },&#XA; hAxis:{&#xA;格式:''&#xA; },&#XA;宽度:640,&#xA;身高:320&#xA; };&#XA;&#XA; //实例化并绘制我们的图表,传递一些选项。&#xA; var chart = new google.charts.Bar(document.getElementById(“columnchart_material”));&#xA; chart.draw(table,google.charts.Bar.convertOptions(options));&#xA;}&#xA;  
&#xA;&#xA;

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

&#xA;

1 个答案:

答案 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);