是否可以在两个不同的javascript块中使用相同的变量?

时间:2015-04-11 18:32:41

标签: javascript php sql web

我正在开发一个必须显示sql视图的网页,所以我用PHP进行查询,但我必须在图表中显示结果,并且我正在尝试使用google geochart。基本上我想做的是:

  1. 使用PHP从SQL视图中选择数据。
  2. 将PHP中的数据转换为javascript变量,以便我可以在图表中使用它。
  3. 获取javascript变量的值以放入google chart api,以便显示我想要的内容。
  4. 到目前为止,我已经完成了第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>
    

4 个答案:

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

push method documentation