Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Drupal-将PHP变量传递给JavaScript的问题?_Javascript_Php_Google Maps_Drupal_Drupal 7 - Fatal编程技术网

Drupal-将PHP变量传递给JavaScript的问题?

Drupal-将PHP变量传递给JavaScript的问题?,javascript,php,google-maps,drupal,drupal-7,Javascript,Php,Google Maps,Drupal,Drupal 7,我构建了一个定制的google map php文件来实现到我的drupal站点的首页,它使用javascript和php,并通过template.php文件中的drupal\u add\u js调用它。我很难弄清楚如何在javascript中正确运行PHP,然后将结果设置为javascript变量markers。我试图将每个结果推送到一个数组中,并通过json\u encode($item)回显该数组但是,在我的控制台中,我得到一个错误,无法读取未定义的的属性“lat” 这是我的整个map.ph

我构建了一个定制的google map php文件来实现到我的drupal站点的首页,它使用javascript和php,并通过template.php文件中的
drupal\u add\u js
调用它。我很难弄清楚如何在javascript中正确运行PHP,然后将结果设置为javascript变量
markers
。我试图将每个结果推送到一个数组中,并通过
json\u encode($item)回显该数组
但是,在我的控制台中,我得到一个错误,
无法读取未定义的
的属性“lat”

这是我的整个map.php:

var map = null;
var infowindow = new google.maps.InfoWindow();
var markers = [Drupal.settings.markers];

window.onload = function () {

var mapOptions = {
    center: new google.maps.LatLng(
        parseFloat(markers[0].lat),
        parseFloat(markers[0].lng)),
    zoom: 13,
    mapTypeId: google.maps.MapTypeId.ROADMAP
};
var path = new google.maps.MVCArray();
var service = new google.maps.DirectionsService();
var infoWindow = new google.maps.InfoWindow();
var map = new google.maps.Map(document.getElementById("map"), mapOptions);
var poly = new google.maps.Polyline({map: map, strokeColor: '#F3443C'});

var lat_lng = new Array();
           for (i = 0; i < markers.length; i++) {
           var data = markers[i]
           var myLatlng = new google.maps.LatLng(data.lat, data.lng);
           lat_lng.push(myLatlng);
           var marker = new google.maps.Marker({
               position: myLatlng,
               map: map,
               title: data.title
           });
           (function (marker, data) {
               google.maps.event.addListener(marker, "click", function (e) {
                   infoWindow.setContent(data.description);
                   infoWindow.open(map, marker);
               });
           })(marker, data);
       }
for (var i = 0; i < markers.length; i++) {
    if ((i + 1) < markers.length) {
        var src = new google.maps.LatLng(parseFloat(markers[i].lat), 
                                         parseFloat(markers[i].lng));
        var des = new google.maps.LatLng(parseFloat(markers[i+1].lat), 
                                         parseFloat(markers[i+1].lng));
        service.route({
            origin: src,
            destination: des,
            travelMode: google.maps.DirectionsTravelMode.DRIVING
        }, function (result, status) {
            if (status == google.maps.DirectionsStatus.OK) {
                for (var i = 0, len = result.routes[0].overview_path.length; i < len; i++) {
                    path.push(result.routes[0].overview_path[i]);
                }
                poly.setPath(path);
            }
        });
    }
}
} 
var-map=null;
var infowindow=new google.maps.infowindow();
var markers=[Drupal.settings.markers];
window.onload=函数(){
变量映射选项={
中心:新google.maps.LatLng(
parseFloat(标记[0].lat),
parseFloat(标记[0].lng)),
缩放:13,
mapTypeId:google.maps.mapTypeId.ROADMAP
};
var path=new google.maps.MVCArray();
var service=new google.maps.DirectionsService();
var infoWindow=new google.maps.infoWindow();
var map=new google.maps.map(document.getElementById(“map”)、mapOptions);
var poly=new google.maps.Polyline({map:map,strokeColor:'#F3443C'});
var lat_lng=新阵列();
对于(i=0;i
这是我的页面--front.tpl.php,我尝试创建可访问js文件的数组:

<?php

  if (isset($_GET['routeselected'])) 
  {
  $result = mysqli_query($db, "SELECT * FROM STOP INNER JOIN RouteStop ON Stop.Stop_ID = RouteStop.Stop_ID WHERE RouteStop.Route_ID = " . (int)$_GET['routeselected'] . " AND RouteStop.Company_ID = " . (int)$_GET['companyselected']);
  $markers = array();
  while (($row = mysqli_fetch_array($result))){
      $markers[$row['title']] = array($row['Stop_ID']);
      $markers[$row['lat']] = array($row['Latitude']);
      $markers[$row['lng']] = array($row['Longitude']);
      $markers[$row['description']] = array($row['StopName']);
      }
    drupal_json_encode($markers);
    drupal_add_js(array('markers' => drupal_json_encode($markers)), 'setting');
  }
  ?>


有人知道我的问题的解决办法吗?谢谢你的帮助

在javascript文件中编写内联PHP代码真是个坏主意

解决办法是:

  • 将php代码移动到模块中
  • 生成$markers作为PHP关联数组/对象
  • 使用
    drupal\u JSON\u encode($markers)
  • 使用将其添加到
    Drupal.settings.markers
    drupal_add_js(数组('markers'=>drupal_json_encode($markers)),'setting')
  • 在js中使用
    var markers=Drupal.settings.markers

有关更多详细信息,请参阅本文:

谢谢,所以基本上只需添加
json\u encode()
这样<代码>否,在脚本/数据库操作结束之前,您不会输出任何内容。您将所有内容添加到一个数组中,并在最后对该数组进行编码。感谢您的回复!如果我只是在
页面--front.tpl.php
中生成
$markers
,它会工作吗?我试图修改我的代码,我将修改我的问题。它仍然不起作用,我想我可能是填充数组不正确。你介意看看我的新密码吗?