将Javascript传递给POST上的Rails控制器+;可点击谷歌地图标记

将Javascript传递给POST上的Rails控制器+;可点击谷歌地图标记,javascript,ruby-on-rails,google-maps,Javascript,Ruby On Rails,Google Maps,在我的Rails应用程序中,我使用API允许用户搜索以下位置: javascript代码()返回一个JSON散列,并使用下拉框中的选项放置一个新标记。我有一个现在什么都不做的标记的监听器,这就引出了我的问题 如何使标记的“click”事件将结果散列(在本例中为“place”)传递给rails控制器? 更一般地说,如何将JavaScript数据传递给Rails控制器? 我看了其他答案,找不到解决办法。任何帮助都将不胜感激 谢谢 ~Dan B @thoughtpunchJQuery可以用所有与aj

在我的Rails应用程序中,我使用API允许用户搜索以下位置:

javascript代码()返回一个JSON散列,并使用下拉框中的选项放置一个新标记。我有一个现在什么都不做的标记的监听器,这就引出了我的问题

  • 如何使标记的“click”事件将结果散列(在本例中为“place”)传递给rails控制器?
  • 更一般地说,如何将JavaScript数据传递给Rails控制器?
  • 我看了其他答案,找不到解决办法。任何帮助都将不胜感激

    谢谢

    ~Dan B


    @thoughtpunch

    JQuery可以用所有与ajax相关的方法序列化数据;您可以使用此选项将原始json发布到服务器:

    $.post("/foo", {place: {foo: "bar"}})
    
    在控制器上:

    def action
      render :text => "Got: #{params[:place]}" # output: 'Got : {"foo":"bar"}'
    end
    

    您可能希望只发布您关心的位置的字段,或者使用
    JSON.parse
    取消JSON字符串序列化,以便在服务器端进行操作。

    您可以使用jQuery执行“获取”并传递所需的参数。因此,根据您的要点,您可以创建一个地址字符串。在您的控制器中,您将发送回将在回调中处理的响应。您可以发回JSON并使用该客户端执行某些操作,或者只发回html进行插入

    google.maps.event.addListener(marker, 'click', function() {
      // maybe a loader here?
      // $('#reviews').html('loading reviews for ' + address + '...');
      $.get('/reviews', {address: address}, function(data) {
        $('#reviews').html(data);
      });
    });
    
    这些数据可以是任何你想要的参数。如果你愿意,你可以把整个地方都派过去<代码>'{place:place}'