Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.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-如何在JavaScript之前加载google api?_Javascript_Php_Google Maps_Drupal_Drupal 7 - Fatal编程技术网

Drupal-如何在JavaScript之前加载google api?

Drupal-如何在JavaScript之前加载google api?,javascript,php,google-maps,drupal,drupal-7,Javascript,Php,Google Maps,Drupal,Drupal 7,我构建了一个定制的GoogleMap来实现我的drupal站点的首页,该站点使用javascript和php,我遇到了一个问题,google maps api在依赖它的php文件被调用之后才被调用。它在我的控制台中按以下顺序记录: ReferenceError: google is not defined map.php:6 GET http://maps.googleapis.com/maps/api/js/AuthenticationService.Authenticate [HTTP/1

我构建了一个定制的GoogleMap来实现我的drupal站点的首页,该站点使用javascript和php,我遇到了一个问题,google maps api在依赖它的php文件被调用之后才被调用。它在我的控制台中按以下顺序记录:

ReferenceError: google is not defined map.php:6

GET http://maps.googleapis.com/maps/api/js/AuthenticationService.Authenticate [HTTP/1.1 200 OK 74ms]
我一直在网上研究我的问题,并从不同的资源进行实验,但还没有任何运气。我已经提供了在我的文件中调用GoogleMapAPI的方法。我已将其放在我的页面--front.tpl.php中:

<script type="application/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>

这是我的整个map.php,它是一个php文件,用javascript和php保存google地图,并通过template.php文件中的drupal_add_js调用:

var script = document.createElement('script');
script.src = 'http://maps.googleapis.com/maps/api/js?sensor=false';
script.type = 'application/javascript';

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


  <?php
  $server = 'db.*****';$user = '*****';$database = '*****';$password = '*****';
  $db = mysqli_connect($server, $user, $password, $database);

  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']);
  while ($row = mysqli_fetch_array($result))
      echo "{\"title\": '".$row['Stop_ID']."', \"lat\": '".$row['Latitude']."', \"lng\": '".$row['Longitude']."', \"description\": '".$row['StopName']."'},";
  }
  ?>

];

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 script=document.createElement('script');
script.src=http://maps.googleapis.com/maps/api/js?sensor=false';
script.type='application/javascript';
var-map=null;
var infowindow=new google.maps.infowindow();
变量标记=[
  • 我想你可以在html.tpl.php的开头添加谷歌地图脚本,

  • 或者在加载map.php之前,使用drupal_add_js在template.php中加载“”。 像这样:drupal_add_js(“‘外部’”)

  • 由于第6行中没有定义google对象,因此javascript文件中包含的某些内容肯定是错误的(基本上第1-3行似乎不是这样工作的;)…请查看这篇StackOverflow文章,并尝试使用建议的代码:


  • 您正在将JavaScript代码添加到.php文件中?是的,据我所知,它工作正常,只是没有及时引用google api。您认为您需要查看整个php文件吗?是的;)这将很有帮助尝试所有三种方法,仅第一种方法对我有效……但是我遇到了一个单独的问题,我的php没有在j中运行avascript。你是否碰巧有任何关于解决这个问题的建议?我可能也应该在另一个问题中询问。谢谢你的回答!第二个选项也应该有效,我添加了一个示例,你需要给它第二个参数“外部”。