2011-12-20 54 views
1

我想实现的是基本上标记所有登录到我的聊天中的用户的位置,这是另一回事。所以我虽然我会使用地理位置api(http://code.google.com/apis/gears/api_geolocation.html)并将生成的位置存储在会话变量中。但它不起作用。这里是代码'在javascript中访问php变量

<?php 
    $my_lat= $_GET['test'];    // get data 
    $my_long= $_GET['fname']; 
    $my_name = "vivek"; 
    $lat1=28.635308; 
    $long1=77.22496; 
    //$latitude = $_GET['latitude']; 
    //$longitude = $_GET['longitude'];// get data 
    echo $my_lat.''.$my_long; 
    ?> 

    <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?key='' 
&sensor=true"></script> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script> 
    <script type="text/javascript"> 
    $(document).ready(function(){ 
     if(navigator.geolocation) { 

      navigator.geolocation.getCurrentPosition(function(position) { 
      var lat = position.coords.latitude; 
      var longi= position.coords.longitude; 
      var url = 'bam.php'; 
     //post to the server! 
     $.get(url, { test: lat,fname: longi },function(data){ 
     alert('data was passed!'); 
     }); 


      }, function() { 
      //now is when the marking should be done. 
      handleNoGeolocation(true); 
      }); 

    } 
    }); 
</script> 

<script type="text/javascript"> 
    function initialize() { 
    var myLatlng = new google.maps.LatLng(28.635308,77.22496); 
    var myOptions = { 
     zoom: 4, 
     center: myLatlng, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    } 

    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
    var thelat = '<?php echo $my_lat;?>'; 
    var thelong = '<?php echo $my_long;?>'; 
    var seslatlng = new google.maps.LatLng(thelat,thelong); 
    alert(seslatlng); 
    var marker = new google.maps.Marker({ 
     position: seslatlng, 
     map: map, 
     animation: google.maps.Animation.DROP, 
     title:"Hello world!", 
    }); 



} 

</script>` 

问题是。变量seslatlng总是设置为(0,0),这不是我想要的。我是PHP新手,我只是粗略的了解服务器端脚本是如何工作的。有人可以解决这个问题吗?

+0

1)当你运行echo $ my_lat时,你会得到什么。''。$ my_long? 2)为什么您将地图的中心设置为硬编码值,而不是基于客户端的IP位置对其进行居中? –

回答

1

我没有看到任何你正在设置seslatlng。如果你想这是一个JS变量中添加:

var seslatlng = "(<?php echo $my_lat . ',' . $my_lng; ?>)"; // (30.230, 8.030) 
+0

我使用var thelat和long分配了seslatng。这里是code-varthelat ='<?php echo $ my_lat;?>'; var thelong ='<?php echo $ my_long;?>'; var seslatlng = new google.maps.LatLng(thelat,thelong); –

+0

我使用了你给我的代码,它似乎不适用于$ my_lat,而$ my_lng可能因为它是从服务器或其他东西中解析出来的。但它可以很好地用于服务器已知的变量$ lat1和$ long1。事情是在客户端在浏览器中看到任何东西之前,代码的php部分被编译得很多。我不知道如何解决它。我是新来的。任何帮助将不胜感激! thnx –

1

当您使用jQuery的ajax的get函数,你想要做的是调用PHP函数,只有返回的位置。这是怎么看起来应该:

<?php 

    if ($_GET['test']) { 
     $my_lat= $_GET['test'];    // get data 
     $my_long= $_GET['fname']; 
     $my_name = "vivek"; 
     $lat1=28.635308; 
     $long1=77.22496; 
     //$latitude = $_GET['latitude']; 
     //$longitude = $_GET['longitude'];// get data 
     echo $my_lat.''.$my_long; 
    } else { 
    ?> 

    <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?key='' 
&sensor=true"></script> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script> 
    <script type="text/javascript"> 
    $(document).ready(function(){ 
     if(navigator.geolocation) { 

      navigator.geolocation.getCurrentPosition(function(position) { 
      var lat = position.coords.latitude; 
      var longi= position.coords.longitude; 
      var url = 'bam.php'; 
     //post to the server! 
     $.get(url, { test: lat,fname: longi },function(data){ 
     alert('My location is: ' + data); 
     }); 


      }, function() { 
      //now is when the marking should be done. 
      handleNoGeolocation(true); 
      }); 

    } 
    }); 
</script> 

<script type="text/javascript"> 
    function initialize() { 
    var myLatlng = new google.maps.LatLng(28.635308,77.22496); 
    var myOptions = { 
     zoom: 4, 
     center: myLatlng, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    } 

    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
    var thelat = '<?php echo $my_lat;?>'; 
    var thelong = '<?php echo $my_long;?>'; 
    var seslatlng = new google.maps.LatLng(thelat,thelong); 
    alert(seslatlng); 
    var marker = new google.maps.Marker({ 
     position: seslatlng, 
     map: map, 
     animation: google.maps.Animation.DROP, 
     title:"Hello world!" 
    }); 



} 

</script> 
<?php } ?> 
+0

但我wana使用返回的位置。你是否试着运行你给我的代码。你将不得不解释。这对我来说并不合适。 –

2

而不是使用分配值的JavaScript变量,使用:

var thelat = '<?=$my_lat?>'; 
var thelong = '<?=$my_long?>'; 

,它会为你工作。我也试过将php变量值赋给javascript变量。

+2

这与'<?php echo $ my_long;?>'在语义上是相同的,除了这个版本需要在PHP/5.4之前启用'short_open_tag',它很少在生产环境中使用。 – DaveRandom

+0

并记得在需要时逃离字符串!我使用这个函数:http://codepad.org/QOTeP3FY。在这种情况下,你有数字,所以理论上你不需要它。 –

+0

@Rajat我使用的代码完美工作,您的代码也很完美,但它指向(0,0)。我不知道为什么。 –

0

最好的办法是:

<script type="text/javascript"> 
    var something=<?php echo json_encode($a); ?>; 
</script> 

json_encode的目的是escpe的报价和其他实体<?php echo $a; ?>可以打破你的代码。