我正在开发一个必须显示sql视图的网页,所以我用PHP进行查询,但我必须在图表中显示结果,并且我正在尝试使用google geochart。基本上我想做的是:
到目前为止,我已经完成了第1点和第2点(我认为)。但是,当我尝试在代码的另一部分再次使用javascript变量时,它没有任何值,因此没有数据显示,我在资源管理器上获得undefined
。
相关守则:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
<?php
//connections and stuff
$tsql="SELECT count(*) as Qty, ShipCountry FROM [Orders Qry] group by ShipCountry"; // yes, is the Northwind database example
$stmt = sqlsrv_query($conn, $tsql);
if ($stmt === false)
{
FatalError("Failed to query table: ".$tsql);
}
else
{
$json=array();
$i=0;
echo "<script type='text/javascript'> var countries = []; </script>";
while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC))
{
echo "<script> countries[".$i."]= ". $row['ShipCountry'] .";</script>";
$i=$i+1;
}
//echo "<h1>". $json["ShipCountry"] ."</h1>"; //I was testing, so the problem is not in retrieving the data from the database.
sqlsrv_free_stmt($stmt);
}
?>
<p>
<script type="text/javascript">
document.write(countries[0]);
</script>
</p>
</body>
</html>
答案 0 :(得分:2)
您忘记引用 $ row [&#39; ShipCountry&#39;] (似乎是一个字符串);
echo "<script> countries[".$i."]= '". $row['ShipCountry'] ."';</script>";
请注意新的引号。
答案 1 :(得分:1)
您可能需要考虑使用AJAX从javascript中查询不同的文件,参见http://www.w3schools.com/ajax/ajax_php.asp。
如果您的PHP文件将JSON返回给AJAX请求,则javascript将拥有一个它理解的对象,您可以在那里使用它。这样您就可以在一个地方拥有所有的JavaScript。例如。这个伪代码:
Javascript.js
function gimmeACountry(i){
var countries = AJAX.get('countries.php');
return countries[i];
}
PHP.php
<?php
$result = mysql_stuff(...);
print json_encode(result);
?>
HTML
<html>
<head>
<script src='Javascript.js'>
</head>
<body onload="document.write(gimmeACountry(0));">
</body>
</html>
如果你真的只想使用一个文件,可以考虑几点:
每次编写javascript时都不需要打开和关闭语句。您的所有PHP都可以嵌入其中。
您可以在块外输出大部分javascript,而不是回显所有内容。我认为PHP更清晰。 E.G。
<script>
<?php $foo = 'bar'; ?>
var foo = <?php echo $foo ?>;
document.write(foo); // writes 'bar'
</script>
如果您仍有范围问题,可以尝试将变量添加到窗口对象,例如
window.countries = []
如果你最后使用javascript做更多的事情,这可能会有问题。我真的建议你使用AJAX。
答案 2 :(得分:0)
在两个块上分发javascript工作正常:
<html xmlns="http://www.w3.org/1999/xhtml">
<head />
<body>
<script>
countries = ['foo'];
</script>
<script type="text/javascript">
document.write(countries[0]);
</script>
</body>
</html>
但问题是你的PHP没有生成有效的java脚本。看看你的浏览器的JS控制台,你会看到ReferenceError
,因为你didn't quote the country names。
答案 3 :(得分:0)
您应该使用push方法和Array()构造
var countries = [];//nope
var countries = new Array();//yep
echo "<script> countries[".$i."]= ". $row['ShipCountry'] .";</script>";//nope
echo "<script> countries.push(".$row['ShipCountry'].");</script>";//yep