Google direction服务未在使用javascript的ruby on rails中运行

Google direction服务未在使用javascript的ruby on rails中运行,javascript,ruby-on-rails,Javascript,Ruby On Rails,我不熟悉RubyonRails和javascript。我想在我的项目中使用谷歌地图方向服务。它在html中运行良好,但当我把它放在rails项目中时,它停止工作并抛出错误 ReferenceError:未定义google var directionsService=new google.maps.directionsService() 我张贴我的代码也请检查下面 function initGeolocation() { if(navigator.geolocation)

我不熟悉RubyonRails和javascript。我想在我的项目中使用谷歌地图方向服务。它在html中运行良好,但当我把它放在rails项目中时,它停止工作并抛出错误

ReferenceError:未定义google

var directionsService=new google.maps.directionsService()

我张贴我的代码也请检查下面

function initGeolocation()
{
       if(navigator.geolocation)
        {
          navigator.geolocation.getCurrentPosition( success, fail );
        }
    else
        {
          alert("Sorry, your browser does not support geolocation services.");
        }
}

var geocoder;
var directionDisplay;
var map;   
var marker;
 alert("bahar");
var directionsService = new google.maps.DirectionsService();
alert("bahar666");




function success(position) {
  geocoder = new google.maps.Geocoder();
  directionsDisplay = new google.maps.DirectionsRenderer();
  coords = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
  var myOptions = {
    zoom:12,
    mapTypeId: google.maps.MapTypeId.ROADMAP,
    center: coords
  }
  map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
  marker=new google.maps.Marker();
  marker.setPosition(coords);
  marker.setMap(map);
  directionsDisplay.setMap(map);

}

function calcRoute(startloc,endloc) {

  var start = new google.maps.LatLng(startloc[0],startloc[1]);
  var end =new google.maps.LatLng(endloc[0],endloc[1]);
  var request = {
    origin:start,
    destination:end,
    travelMode: google.maps.TravelMode.DRIVING
  };
 alert("satatus"+directionsService);
  directionsService.route(request, function(result, status) {
    if (status == google.maps.DirectionsStatus.OK) {
      directionsDisplay.setDirections(result);
    }
    else
     {
       alert("error in status"+status);
     }
  });
}

   function getlonglat(address){
 var loc3=[];
 geocoder.geocode( { 'address': address}, function(results, status) {

    if (status == google.maps.GeocoderStatus.OK) {
    loc3[0]=results[0].geometry.location.lat();
    loc3[1]=results[0].geometry.location.lng();

  } 
  else {
    alert("Geocode was not successful for the following reason: " + status);
       }
});
 return loc3;

}


   function codeAddress() {

var address1 = document.getElementById("routeStart").value;
var address2 = document.getElementById("routeEnd").value;

var loc1=getlonglat(address1);    
var loc2=getlonglat(address2);



    setTimeout(function() {calcRoute(loc1,loc2);},800);


  }


    function fail()
    {
         var err=document.getElementById("error_view");
          err.innerHTML="An unknown error occurred."
    }




    <!DOCTYPE HTML>
  <html>
  <head>
  <title>Basic GeoLocation Map</title>
 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
 <script type="text/javascript" src="http://maps.google.com/maps/api       /js?libraries=places&sensor=false"></script>
 <script src="map.js" type="text/javascript"></script>

 </head>
 <body onload="initGeolocation();">
 <p id="error_view"></p>
 <div id="map_canvas" style="width: 600px; height: 400px; border-right: 1px solid     #666666;    border-bottom: 1px solid #666666; border-top: 1px solid #AAAAAA; border-left:     1px solid #AAAAAA;"></div>
 <br><br>
 <form action="#" onSubmit="codeAddress();return false;" id="routeForm">
   <label>
      From: <br />
     <input type="text" id="routeStart" >

    </label>
      <label><br />
  To: <br />
  <input type="text" id="routeEnd"  >
   </label>
     <script>

            var autocomplete1 = new google.maps.places.Autocomplete($("#routeStart")[0], {});
            var autocomplete2 = new google.maps.places.Autocomplete($("#routeEnd")[0], {});

          google.maps.event.addListener(autocomplete1, 'place_changed', function() {
            var place = autocomplete1.getPlace();
            console.log(place.address_components);
        });


        google.maps.event.addListener(autocomplete2, 'place_changed', function() {
            var place = autocomplete2.getPlace();
            console.log(place.address_components);
        });
       </script>

   <input type="submit" value="Calculate route">
  </form>

  </body>
  </html>
函数initGeolocation()
{
if(导航器.地理位置)
{
navigator.geolocation.getCurrentPosition(成功,失败);
}
其他的
{
警报(“对不起,您的浏览器不支持地理定位服务。”);
}
}
var地理编码器;
方向显示;
var映射;
var标记;
警报(“巴哈尔”);
var directionsService=new google.maps.directionsService();
警报(“bahar666”);
功能成功(职位){
geocoder=新的google.maps.geocoder();
directionsDisplay=new google.maps.DirectionsRenderer();
coords=new google.maps.LatLng(position.coords.latitude,position.coords.longitude);
变量myOptions={
缩放:12,
mapTypeId:google.maps.mapTypeId.ROADMAP,
中心:coords
}
map=new google.maps.map(document.getElementById(“map_canvas”),myOptions);
marker=新的google.maps.marker();
标记器。设置位置(坐标);
marker.setMap(map);
方向显示.setMap(地图);
}
功能计算(startloc、endloc){
var start=new google.maps.LatLng(startOC[0],startOC[1]);
var end=new google.maps.LatLng(endloc[0],endloc[1]);
var请求={
来源:start,
目的地:完,
travelMode:google.maps.travelMode.DRIVING
};
警报(“satatus”+方向服务);
路由(请求、功能(结果、状态){
if(status==google.maps.directionstatus.OK){
方向显示。设置方向(结果);
}
其他的
{
警报(“状态错误”+状态);
}
});
}
函数getlonglat(地址){
var loc3=[];
geocoder.geocode({'address':address},函数(结果,状态){
if(status==google.maps.GeocoderStatus.OK){
loc3[0]=结果[0]。几何体。位置。lat();
loc3[1]=结果[0]。几何体。位置。lng();
} 
否则{
警报(“地理编码因以下原因未成功:“+状态”);
}
});
返回loc3;
}
函数代码地址(){
var address1=document.getElementById(“routeStart”).value;
var address2=document.getElementById(“routeEnd”).value;
var loc1=getlonglat(地址1);
var loc2=getlonglat(地址2);
setTimeout(函数(){calcRoute(loc1,loc2);},800);
}
函数失败()
{
var err=document.getElementById(“error_view”);
err.innerHTML=“发生未知错误。”
}
基本地理位置图



发件人:

致:
var autocomplete1=新的google.maps.places.Autocomplete($(“#routeStart”)[0],{}); var autocomplete2=新的google.maps.places.Autocomplete($(“#routeEnd”)[0],{}); google.maps.event.addListener(autocomplete1,'place\u changed',function(){ var place=autocomplete1.getPlace(); console.log(位置、地址和组件); }); google.maps.event.addListener(autocomplete2,'place\u changed',function(){ var place=autocomplete2.getPlace(); console.log(位置、地址和组件); });
通过将html和javascript放在同一页面上解决