这是我的第一篇文章:) 我有一个问题,从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没有多少经验。任何帮助将不胜感激;)
答案 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)
<script />
分为两部分。
<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;