3

ルビーインスタンス変数の値を緯度と経度の値に設定しようとしています。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上など)はサーバー上で実行されます。インターネット経由でクライアントに送信されるHTML+JS+すべてを作成します。

クライアント(Webブラウザ)はこのコードを受け取り、とりわけJavaScriptコードを実行します。

したがって、JavaScriptコードを実行した結果として、Ruby変数を設定することはできません…Webサーバーに再度接続する必要があります。

その関数が呼び出されたときにWebサーバーにリクエストを送り返すには、AJAX(または他のより少ないテクノロジー)を使用する必要があります。

例(jQueryを使用jQuery.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 に答える