0

我正在使用 HTML 5 地理位置代码 ( http://www.w3schools.com/html/html5_geolocation.asp ) 来获取用户位置。

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

我想在 ruby​​ 中创建一个变量来保存 position.coords.latitude 和 position.coords.longitude 的值,有谁知道捕获这些信息并将其保存为 ruby​​ 变量的最有效方法?

4

3 回答 3

2

那么有两种方法可以做到这一点 -

  1. 进行ajax调用

    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);
            }
        });
    

    使用参数哈希在服务器端访问它

    latitude = params[:latitude]
    longitude = params[:longitude]
    
  2. 在客户端设置位置 cookie 并在服务器端访问它。

    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,因为 cookie 会随每个 HTTP 请求发送到服务器,此外,您可能需要通知用户使用了跟踪技术。

于 2013-09-05T06:11:31.417 回答
1

请求具有以下步骤:

  1. 浏览器向服务器请求页面
  2. 服务器处理请求并返回可能包含 Javascript 代码的页面
  3. 浏览器执行 javascript 代码并继续处理它

如何拥有仅存在于3step中的变量的问题2,这是不可能的。

另一种方法是简单地添加一个 ajax 调用(即重复步骤 1 到 3,而不是“浏览器”读取“Javascript 代码”),将此信息发送到服务器以保存在数据库或其他东西中,但你仍然会有用javascript编写你的逻辑。

于 2013-09-04T23:34:22.823 回答
0

有谁知道捕获此信息并将其保存为 ruby​​ 变量的最有效方法?

你的有效衡量标准是什么?数据到达服务器时不会丢失随机数字吗?

发出 jQuery ajax 请求是最简单的:

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]
于 2013-09-05T00:48:35.973 回答