2013-09-04 1 views
0

Я использую код HTML 5 Geolocation (http://www.w3schools.com/html/html5_geolocation.asp), чтобы получить местоположение пользователя.Сохранение переменной Javascript в Ruby

... 
function showPosition(position) 
    { 
    x.innerHTML="Latitude: " + position.coords.latitude + 
    "<br>Longitude: " + position.coords.longitude; 
    } 
</script> 

Я хочу создать переменную в рубин, который содержит значение position.coords.latitude и position.coords.longitude, кто-нибудь знает самый эффективный способ, чтобы захватить эту информацию и сохранить его в качестве переменной рубинового ?

+2

Использовать Ajax? JS выполняется на клиенте; Ruby на сервере. Как вы хотите использовать значение в Ruby? –

+0

Вы хотите управлять этим на стороне сервера? Сохранить его в БД? Это для приложения rails? – Beartech

+0

В конечном итоге я хочу сравнить местоположение пользователя с различными местоположениями, сохраненными в моей базе данных. Я предполагаю, что лучший способ добиться этого - сохранить значения в хеше params, но я не совсем уверен. – Reuben

ответ

1

Ну есть 2 способа вы можете сделать это -

  1. Сделать ajax call

    var latitude = position.coords.latitude; 
    var longitude = position.coords.latitude; 
    
    $.ajax({ 
         url: "/<some_route>?latitude="+latitude+"&longitude="+longitude, 
         success: function(data) { 
          // do something here like for example replace some arbitrary container's html with the stuff returned by server. 
          $("#container").html(data); 
         } 
        }); 
    

    доступ к нему на стороне сервера с помощью Params хэш

    latitude = params[:latitude] 
    longitude = params[:longitude] 
    
  2. Установить местоположение куки на стороне клиента и доступ к нему на стороне сервера.

    var latitude = position.coords.latitude; 
    var longitude = position.coords.longitude; 
    document.cookie = "cl=" + latitude + "&" + longitude + ";"; 
    

    И в вашем контроллере вы можете получить доступ к этому -

    current_location = cookies[:cl] 
    unless current_location.nil? 
        latitude = current_location.split('&')[0] 
        longitude = current_location.split('&')[1] 
    end 
    

Сказав, что вы должны предпочесть вариант 1, потому что куки отправляются на сервер при каждом запросе HTTP и дополнительно может понадобиться информировать пользователей о том, что используются технологии отслеживания.

+0

Спасибо! Я использовал вашу вторую стратегию и делал именно то, что мне нужно – Reuben

1

Просьба иметь, на высоких, следующие шаги:

  1. браузер запрашивает страницу на сервер
  2. Сервер обрабатывает запрос и возвращает страницу, которая может включать в себя Javascript код
  3. браузер выполняет яваскрипт кода и продолжать работать на нем

вопрос о том, как иметь переменный, которая присутствует только в 3 на этапе 2, это невозможно.

Альтернатива - это просто добавить ajax-вызов (то есть повторить шаги с 1 по 3, но вместо «Браузер» читать «Код Javascript»), который отправляет эту информацию на сервер для сохранения в базе данных или чего-то еще, но вам все равно придется программировать свою логику в javascript.

0

Кто-нибудь знает самый эффективный способ захвата этой информации и сохранить его как рубиновую переменную?

Ваше измерение ? При попадании на сервер данные не будут отсутствовать?

Создание запроса Ajax JQuery является простой:

var lat = 10; 
var lon = 20; 

function onsuccess(data, textStatus, jqXHR) { 
    alert(textStatus); 
} 

$.post(
    "http://localhost:3000/some/route", 
    {'lat': lat, 'lon': lon}, 
    onsuccess //optional 
); 

широта и долгота могут быть получены внутри действия из Params хэша:

lat = params[:lat] 
lon = params[:lon] 
Смежные вопросы