Публикация данных геолокации в PHP с использованием AJAX - PullRequest
1 голос
/ 25 января 2012

Я просмотрел несколько похожих тем - но не могу точно понять, где я ошибаюсь. Я использую AJAX и PHP, чтобы просмотреть информацию о пользователе, который я создаю. Я знаю, что AJAX & PHP работает, поскольку он сохраняет все (даже фиктивные значения lat & lng) в моей таблице базы данных. Я играю с переменными уже пару часов, и наилучшие результаты, которые у меня были до сих пор, это значение '0', вставленное в базу данных.

document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
getCurrentLocation();
}
function onError(message) {
navigator.notification.alert(message, "", "Error");
}
function getCurrentLocation() {
navigator.geolocation.getCurrentPosition(locationSuccess, onError);
}
function locationSuccess(position) {
lat = document.getElementById("latSpan");
lon = document.getElementById("latSpan");
latitude = position.coords.latitude;
longitude = position.coords.longitude;
}
//recording function
function getXMLObject()  //XML OBJECT
{
var xmlHttp = false;
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP")  // For Old Microsoft Browsers
}
catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP")  // For Microsoft IE 6.0+
}
catch (e2) {
xmlHttp = false   // No Browser accepts the XMLHTTP Object then false
}
}
if (!xmlHttp && typeof XMLHttpRequest != 'undefined') 
{ 
xmlHttp = new XMLHttpRequest();        //For Mozilla, Opera Browsers
}
return xmlHttp;  // Mandatory Statement returning the ajax object created
}
var xmlhttp = new getXMLObject();   //xmlhttp holds the ajax object 
function ajaxFunction() {
var getdate = new Date();  //Used to prevent caching during ajax call
if(xmlhttp) { 
xmlhttp.open("POST","http://www.lauracrane.co.uk/app/rec/location.php",true); //
xmlhttp.onreadystatechange  = handleServerResponse;
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xmlhttp.send("latitude=" + latitude + "&longitude=" + longitude);
}
}
function handleServerResponse() {
if (xmlhttp.readyState == 4) {
if(xmlhttp.status == 200) {
    document.getElementById("message").innerHTML=xmlhttp.responseText;
}
else {
alert("Error during AJAX call. Please try again");
}
}}'

Мне было интересно, если кто-то может понять, почему он не передает значение lat & lng в функцию AJAX.

Любая помощь будет оценена. :)

Laura

Ответы [ 2 ]

0 голосов
/ 27 января 2012

Почему бы просто не использовать вызов jQuery ajax? Ваш код размечен для IE6 ... Так как это отмечено тегом phonegap, я предполагаю, что у вас есть доступ к использованию более новых методов ведения дел.

Я бы предложил использовать jQuery ajax ..

function ajaxFunction() {
$.ajax({
  url:'http://www.lauracrane.co.uk/app/rec/location.php',
  type:'POST',
  data:'lat='+lat+'&long='+long,
  success:function(d){
    console.log(d);
  },
  error(w,t,f){
    console.log(w+' '+t+' '+f);
  }
});
}
0 голосов
/ 25 января 2012

Может быть, мы не можем увидеть весь код, но похоже, что широта и долгота зависят от местоположения locationSuccess. Поэтому, когда вы попытаетесь получить к ним доступ в функции ajaxFunction, они получат значения по умолчанию.

Кроме того, вам не нужно делать все это забавное getXMLObject. В браузерах webkit, таких как Android, iOS и BlackBerry, вам просто нужно:

var xmlhttp = new XMLHttpRequest();

И, наконец, поскольку вы, вероятно, запускаете это из протокола file: //, вам придется искать код состояния 0, который в данном случае аналогичен 200.

function handleServerResponse() {
    if (xmlhttp.readyState == 4) {
        if(xmlhttp.status == 200 || xmlhttp.status == 0) {
            document.getElementById("message").innerHTML=xmlhttp.responseText;
        }
    }
    // etc.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...