Send user's geolocation to server every minute

geolocation, jquery, mysql, php

Solution

You need to do something like:

var currPosition;
navigator.geolocation.getCurrentPosition(function(position) {
    updatePosition(position);
    setInterval(function(){
        var lat = currPosition.coords.latitude;
        var lng = currPosition.coords.longitude;
        jQuery.ajax({
            type: "POST", 
            url:  "myURL/location.php", 
            data: 'x='+lat+'&y='+lng, 
            cache: false
        });
    }, 1000);
}, errorCallback); 

var watchID = navigator.geolocation.watchPosition(function(position) {
    updatePosition(position);
});

function updatePosition( position ){
    currPosition = position;
}

function errorCallback(error) {
    var msg = "Can't get your location. Error = ";
    if (error.code == 1)
        msg += "PERMISSION_DENIED";
    else if (error.code == 2)
        msg += "POSITION_UNAVAILABLE";
    else if (error.code == 3)
        msg += "TIMEOUT";
    msg += ", msg = "+error.message;

    alert(msg);
}

Problem

I'm trying to write a application that sends user's geolocation to MYSQL database every minute or so. This is the code I have right now, but it's not working. How do i need to change this to make it work? JS: ``` <!DOCTYPE html> <html> <head> <script src="js/jquery.js"></script> </head> <body> <script> setInterval ( "onPositionUpdate()", 10000 ); function onPositionUpdate(position) { var lat = position.coords.latitude; var lng = position.coords.longitude; jQuery.ajax({ type: "POST", url: "myURL/location.php", data: 'x='+lat+ '&y='+lng , cache: false, }); } if(navigator.geolocation) navigator.geolocation.watchPosition(onPositionUpdate); else alert("navigator.geolocation is not available"); </script> </body> </html> ``` and PHP: ``` <?php include 'config.php'; // database connection $conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass); // new data $x = @$_POST['x']; $y = @$_POST['y']; // query $sql = "update locations set x=?, y=? where username = asd"; $q = $conn->prepare($sql); $q->execute(array($x), ($y)); ?> ``` And I suppose this is not the right way to send multiple variables, is it?. Firebug's console shows me ``` missing } after property list [Break On This Error] data: 'x='+lon+'&y='+lat; ``` When I use only one value, it POSTs that variable to server only once and after that console gives: ``` position is undefined [Break On This Error] var lat = position.coords.latitude; ```

Original source