3

我正在尝试将 ruby​​ 实例变量的值设置为纬度和经度值。您将如何在 javascript 函数中设置实例变量的值?

像这样的东西?

<script>
    if (geoPosition.init()){  geoPosition.getCurrentPosition(geoSuccess, geoError);  }

    function geoSuccess(p) { 
        <% @lat_lng = p.coords.latidude + "," + p.coords.longitude %> 
    }

    function geoError(){ alert("No Location: Won't be able to use Maps functionality"); }
</script>

有些东西告诉我我需要 json。

4

1 回答 1

13

您不了解代码运行的地点和时间。

Ruby(在 Rails 上或其他)在服务器上运行。它创建通过 Internet 发送到客户端的 HTML+JS+任何内容。

客户端(Web 浏览器)接收此代码并执行 JavaScript 代码等。

因此,您不能将 Ruby 变量设置为运行 JavaScript 代码的结果……而无需再次联系 Web 服务器。

当调用该函数时,您需要使用 AJAX(或其他一些较小的技术)将请求发送回 Web 服务器。

例如(使用jQueryjQuery.post):

function geoSuccess(p){
  $.post('/newcoords',{lat:p.coords.latitude, long:p.coords.longitude});
}

在某处的某个控制器中:

def newcoords
  @lat_lng = [params[:lat],params[:long]].join(",")
end
于 2013-03-25T03:36:31.407 回答