What im trying to do here is sending a JavaScript variable to a PHP function. What I'm developing is a jQuery Mobile App where you can check in when you reach a specific longitude/latitude. But I'm having problem with sending the longitude/latitude to the PHP-function. Im sending it to a PHP-function because im gonna do a comparison with the longitude/latitude that I've stored in my database.
Here's my code.
function testResults() {
if(navigator.geolocation) {
//Get the current position
navigator.geolocation.getCurrentPosition(function(position) {
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
document.write("lat", latitude);
document.write('<br /><br />');
document.write("long", longitude);
});
} else {
alert("Sorry... your browser does not support the HTML5 GeoLocation API");
}
//////////// Here I tried with jQuery/Ajax. I know that it's wrong.
//////////// Im putting it here so that it maybe clarifies what Im
//////////// trying to do.
$.post("checkLocation.php", {
lat : latitude,
longi : longitude
}, function(data) {
alert("Data Loaded: " + data);
});
////////////////////////////////////////////////////////////////////
}
testResults();
How do I approach this problem? I've tried with JSON, but i didn't get it to work. Any help will be appreciated.
-
show your PHP code (the part with retrieving of params)Distdev– Distdev2011年12月01日 14:01:36 +00:00Commented Dec 1, 2011 at 14:01
-
Please post the PHP-Side of your Application.> And make wellformed JSON: { "lat": latitude, "lng": longitude }frank_neff– frank_neff2011年12月01日 14:01:53 +00:00Commented Dec 1, 2011 at 14:01
-
@frank_neff: That's a object literal and not JSON. No need for quotes there. The AJAX library serializes the object into wellformed JSON completely independently from whether source code has quotes or not.RoToRa– RoToRa2011年12月01日 14:07:35 +00:00Commented Dec 1, 2011 at 14:07
-
@RoToRa Sorry, my false. I do ever enquote to be shure ;)frank_neff– frank_neff2011年12月01日 14:23:42 +00:00Commented Dec 1, 2011 at 14:23
-
I don't quite have a functional php-side yet. But Im working on it as we speak.Oscar– Oscar2011年12月01日 16:50:10 +00:00Commented Dec 1, 2011 at 16:50
4 Answers 4
You're sending the request before you get the geolocation response
You need to do it inside the callback.
1 Comment
Try to use AJAX
http://api.jquery.com/jQuery.ajax/
Your handler should look like this:
$.ajax({
type: "POST",
url: "checklocation.php",
data: "lat="+latitude+"&longi="+longitude
}).done(function( msg ) {
alert( "Data Saved: " + msg );
});
navigator.geolocation.getCurrentPosition(function(position) {
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
document.write("lat", latitude);
document.write('<br /><br />');
document.write("long", longitude);
});
you have local vars latitude and longitude here. If you want to use them outside of this function you can use global vars:
var latitude;
var longitude;
//...
navigator.geolocation.getCurrentPosition(function(position) {
latitude = position.coords.latitude;
vlongitude = position.coords.longitude;
document.write("lat", latitude);
document.write('<br /><br />');
document.write("long", longitude);
});
//usage(transfer) of vars
Comments
Try to use the AJAX-Request in callback (Proof of concept, not shure if it works):
function testResults()
{
if (navigator.geolocation)
{
//Get the current position
navigator.geolocation.getCurrentPosition(function (position)
{
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
// do callback
$.ajax(
{
type: "POST",
url: "checklocation.php",
data: "lat=" + latitude + "&lon=" + longitude
}).done(function (msg)
{
alert("Data Saved: " + msg);
});
});
}
else
{
alert("Sorry... your browser does not support the HTML5 GeoLocation API");
}
}
testResults();
Cheers. Frank