2013-10-24 52 views
0

我有一個使用Google Maps API和JavaScript地理定位系統計算距離的PHP腳本。從PHP獲取JavaScript函數輸出

我想獲得當前用戶的座標,我的PHP代碼,例如:

$user_location = array(latitude, longitude); 

截至目前,我想是這樣的:

location.php:

$contents = file_get_contents('user_loc.html'); 
if ($contents != "false") { 
    $user_location = explode(',', $contents); 
} 
// Do stuff with coordinates 

user_loc.html:

<!DOCTYPE HTML> 
<html> 
    <head> 
     <script type="text/javascript"> 
      navigator.geolocation.getCurrentPosition(
       function (position) { 
        console.log(position.coords.latitude); 
        document.write(position.coords.latitude + ',' + position.coords.longitude); 
       }, 
       function (error) { 
        document.write("false"); 
       }, 
       { 
        timeout: (5 * 1000), 
        maximumAge: (1000 * 60 * 15), 
        enableHighAccuracy: true 
       } 
      ); 
     </script> 
    </head> 

    <body> 
    </body> 
</html> 

我很確定這不是最好的方法來做到這一點。有什麼建議麼?

+0

您必須使用js在客戶端上運行才能獲取地理位置,然後將其發送回服務器。或者您可以根據請求者的IP獲取地理位置,但這可能不太可靠。 – carter

+0

file_get_contents將獲得文件的字符串輸出,而不是您正在查找的結果。您需要訪問該頁面,然後在頁面上,您可以使用lat和long進行POST到location.php,並根據需要進行處理 – Fallenreaper

回答

0

函數document.write只是一個臨時的DOM操作,不會保存在您的文件中。 正確的順序是運行html文件,使用javascript確定座標,然後將它們發送到託管php文件的服務器(例如通過AJAX)。

示例使用jQuery AJAX:

// your code above ... 
$.post("location.php", { lat: latitude, lon: longitude }, function(data) { 
    console.log(data); 
}); 

在服務器端location.php你現在就可以打印數據從你的HTML收到:

print_r($_POST); 

這就是所謂的異步請求。當手動打開location.php文件時,您不會獲取任何數據,因爲您沒有通過任何數據。所以當html文件被執行時,它使用javascript來確定數據,現在你已經得到它並且只是想將它發送到服務器。爲了獲得服務器響應,我實現了一個回調函數,服務器響應爲console.log,以便您可以檢查結果。