如何将.php中的json_encoded变量传递给外部.js?

时间:2017-12-23 09:22:35

标签: javascript php jquery google-maps-api-3

这是我的第一篇文章:) 我有一个问题,从PHP VIEW文件传递json_encoded变量到外部JS。我正在使用FuelPHP。以下是VIEW的一部分:     1。这些是PHP变量:

<?php
  $sensor_id_num = $sensor->id_num; 
  $sensor_name = $sensor->name;
  $sensor_unit = $sensor->unit;
  $sensor_lati = $sensor->lati;
  $sensor_longi = $sensor->longi;
?>

2. 这里的变量是json_encoded,它们的值是给JS变量的:

<script src="<?php echo Asset::get_file('mapmarkers.js','js') ?>" type="text/javascript">
  var sensor_id_num = <?php echo json_encode($sensor_id_num); ?>;
  var sensor_name = <?php echo json_encode($sensor_name); ?>;
  var sensor_unit = <?php echo json_encode($sensor_unit); ?>;
  var sensor_lati = <?php echo json_encode($sensor_lati); ?>;
  var sensor_longi = <?php echo json_encode($sensor_longi); ?>;
</script>

3. 上面提到的mapmarkers.js是我要传递vars的外部JS。在那个JS我使用google.maps javascript API为每个地图绘制一个地图和一个标记。每个标记都代表一个传感器的位置,这就是我通过纬度和经度的原因。这应该是php VIEW的一部分。该视图显示了传感器的一些文本信息以及地图。

4. 所以文字信息和地图是可视化的,但不是标记。问题出在JS文件中。当我尝试将标签中的变量用于JS时,浏览器控制台显示它们的值是“未定义的”#。我使用&#39; window.name_of_var&#39;访问vars。即使我没有窗口也可以访问它们。&#39;它们的值未显示,&#34; Uncaught ReferenceError:sensor_lati未定义&#34;而是显示。这是JS的一部分:

var myLatLng = new google.maps.LatLng(window.sensor_lati,window.sensor_longi);

var marker = new google.maps.Marker({
        position: myLatLng,
        map: map,
        title: window.sensor_name,
        html: window.sensor_name

});
google.maps.event.addListener(marker, 'click', function () {
      infowindow.setContent(html);
      infowindow.open(map, marker);
});

有没有人知道问题出在哪里?我对FuelPHP和JavaScript没有多少经验。任何帮助将不胜感激;)

3 个答案:

答案 0 :(得分:2)

您不能拥有<script>元素,其中包含src属性 javascript代码。嗯,你可以,但是几乎没有定义浏览器的用途,所以你的结果会因浏览器而异。

解决方案是首先定义变量,然后包括远程脚本:

<script type="text/javascript">
    var sensor_id_num = <?php echo json_encode($sensor_id_num); ?>;
    var sensor_name = <?php echo json_encode($sensor_name); ?>;
    var sensor_unit = <?php echo json_encode($sensor_unit); ?>;
    var sensor_lati = <?php echo json_encode($sensor_lati); ?>;
    var sensor_longi = <?php echo json_encode($sensor_longi); ?>;
</script>
<script src="<?php echo Asset::get_file('mapmarkers.js','js') ?>" type="text/javascript"></script>

答案 1 :(得分:1)

在调用外部js文件之前设置变量

<script type="text/javascript">
  var sensor_id_num = <?php echo json_encode($sensor_id_num); ?>;
  var sensor_name = <?php echo json_encode($sensor_name); ?>;
  var sensor_unit = <?php echo json_encode($sensor_unit); ?>;
  var sensor_lati = <?php echo json_encode($sensor_lati); ?>;
  var sensor_longi = <?php echo json_encode($sensor_longi); ?>;
</script>
<script src="<?php echo Asset::get_file('mapmarkers.js','js') ?>" type="text/javascript">

答案 2 :(得分:0)

  1. 您应该将<script />分为两部分。
  2. 可能你不需要这里的json_encode php功能。还要添加包装双引号。
  3. 必须在定义变量后添加mapmarkers.js
  4. &#13;
    &#13;
    <script type="text/javascript">
      window.sensor_id_num = "<?php echo $sensor_id_num; ?>";
      window.sensor_name = "<?php echo $sensor_name; ?>";
      window.sensor_unit = "<?php echo $sensor_unit; ?>";
      window.sensor_lati = "<?php echo $sensor_lati; ?>";
      window.sensor_longi = "<?php echo $sensor_longi; ?>";
    </script>
    
    <script src="<?php echo Asset::get_file('mapmarkers.js','js') ?>" type="text/javascript" />
    &#13;
    &#13;
    &#13;