将Javascript变量保存到Ruby中

时间:2013-09-04 22:42:58

标签: javascript ruby html5

我正在使用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变量的最有效方法?

3 个答案:

答案 0 :(得分:2)

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

  1. 拨打电话

    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 hash

    在服务器端访问它
    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
    
  3. 话虽如此,您应该更喜欢选项1,因为每次HTTP请求都会将cookie发送到服务器,此外您可能需要通知用户使用了跟踪技术。

答案 1 :(得分:1)

请求具有以下步骤:

  1. 浏览器向服务器请求页面
  2. 服务器处理请求并返回页面,其中可能包含Javascript代码
  3. 浏览器执行javascript代码并继续处理
  4. 如何在3步骤2中出现仅存在变量的问题,这是不可能的。

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

答案 2 :(得分: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]