2016-09-30 2 views
1

Я использую navigator.geolocation.getcurrentposition, чтобы получить текущее местоположение пользователя (lat/long). Вот моя функция:Получить местоположение пользователя из навигатора в контроллере

function userLocation(){ 

    var response = []; 
    if (navigator.geolocation) { 

     navigator.geolocation.getCurrentPosition(function(p){ 
      // on success 
      response['latitude'] = p.coords.latitude; 
      response['longitude'] = p.coords.longitude; 

      console.log(response); 

     }, function(e){ 
      // on error 
      console.log(e); 
     }); 

    } else { 
     console.log("Geolocation is not supported by this browser."); 
    } 

    return response; 

} 

Он всегда возвращает пустой массив и я понимаю, что функция getCurrentPosition делает асинхронный вызов, так что не представляется возможным вернуть ответ.

Я попытался использовать google geocode api, чтобы получить местоположение, но основанное на IP-адресе пользователя, но не так точно.

Я хочу функцию, чтобы вернуть эти lat/long. Есть ли способ получить ответ от getCurrentPosition в моей функции контроллера?

+0

Объявление глобальной переменной '(var pos = {};) ', заполнить эту переменную и использовать' promises' для возврата значения из асинхронного вызова геолокации? – RamRaider

+0

Функция асинхронная. Он работает в фоновом режиме, определяя позицию. Когда он преуспел (или провалился), через несколько секунд после того, как ваш код попал в ответ «return response», это означает, что анонимная функция, которую вы передали, будет устанавливать ваш response.latitude и .longitude. Вам нужно запустить право AJAX, где у вас есть 'console.log (response)' и отправить коорды на сервер, используя простой запрос GET/POST. –

+0

@ChrisG да, это способ получить lat/long в контроллере, но что будет возвращать функция userLocation(), как заставить его ждать ответа от navigator.geolocation.getCurrentPosition()? Как я узнаю, успешно ли запрос? – manoj

ответ

0

Вы можете использовать третий параметр getCurrentPosition. См. Следующий пример.

var response = []; 
var options = { 
    enableHighAccuracy: true, 
    timeout: 5000, 
    maximumAge: 0 
}; 

function success(pos) { 
    response['latitude'] = pos.coords.latitude; 
    response['longitude'] = pos.coords.longitude; 
}; 

function error(err) { 
    // 
}; 

navigator.geolocation.getCurrentPosition(success, error, options); 

Вы также можете обратиться по следующей ссылке.

https://www.tutorialspoint.com/html5/geolocation_getcurrentposition.htm

+0

Я хочу использовать эти lat в моем контроллере. Как я могу это сделать? – manoj

+0

Вы пытаетесь использовать переменную javascript в PHP-контроллере? – KinjalMistry

+0

Мне просто нужен ответ от этой функции для использования в моем контроллере. какие-либо предложения? – manoj

1

Место getLocation() функция в окне OnLoad и один всплывающее окно попросит, чтобы ваше местоположение и, если вы позволите ваш Lattitude и долгота будет grabed.

Пожалуйста, используйте код ниже.

function getLocation() { 
    if (navigator.geolocation) { 
     navigator.geolocation.getCurrentPosition(showPosition); 
    } else { 
     console.log("Geolocation is not supported by this browser."); 
    } 
} 

function showPosition(position) { 
    console.log("Latitude: " + position.coords.latitude + 
    "<br>Longitude: " + position.coords.longitude); 
    $.ajax({ 
     url: 'abc.php', 
     type: 'POST', 
     data: 'latitude='+position.coords.latitude+'&longitude='+position.coords.longitude, 
     success: function(data) { 
     console.log(data); 
     }, 
     error: function(e) { 
     //called when there is an error 
     //console.log(e.message); 
     } 
    }); 
} 

Пожалуйста, обратитесь по этой ссылке, чтобы получить больше представления http://www.w3schools.com/html/tryit.asp?filename=tryhtml5_geolocation

+0

Я получаю ответ в консоли, но мне нужно получить доступ к ответу в контроллере – manoj

+0

Вы можете сделать ajax-вызов этой функции методу контроллера, где вы хотите, и вы можете получить Широта и долготу по запросу ajax вызов. –

+0

Да, это способ получить lat/long в контроллере, но что будет возвращать функция userLocation(), как заставить его ждать ответа от navigator.geolocation.getCurrentPosition()? Как я узнаю, успешно ли запрос? – manoj

-2

Попробуйте нажать текущие значения координат с помощью response.push()

var response = []; 
if (navigator.geolocation) { 

    navigator.geolocation.getCurrentPosition(function(p){ 

     response.push(p.coords.latitude, p.coords.longitude); 

     console.log(response); 

    }); 

} else { 
    console.log("Geolocation is not supported by this browser."); 
} 
1

Вот как сделать что-то с результатом:

function userLocation(cb) { 
    if (navigator.geolocation) { 
     navigator.geolocation.getCurrentPosition(function(p){ 
      // on success 
      cb(null, p.coords); 
     }, function(e){ 
      // on error 
      cb(e, null); 
     }); 
    } else { 
     cb("Geolocation is not supported by this browser.", null); 
    } 
} 

Теперь вызовите функцию следующим образом:

userLocation(function(err, coords) { 
    if (err) console.log(err); 
    else { 
     // do something with coords 
    } 
}); 
Смежные вопросы