2011-12-20 53 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; ?>可以打破你的代碼。