在ajax中添加额外的数据:beforeSend(link_to)?

时间:2016-05-05 08:41:39

标签: javascript ruby-on-rails ajax link-to link-to-remote

我的link_to remote:设置为true。我想要做的是在请求中添加一个额外的属性,所以我尝试了这个:

<script>
  $(document).ready(
      function(){
        $("#part_btn").bind("ajax:beforeSend",
            function(event, xhr, settings, data){
              settings.data += "&user_id=5"
            })
      })
</script>

现在我甚至不知道这是否可行,因为user_id永远不会发送到控制器,当我记录setting.data时我得到null&user_id=5

如果不可能这样做,还有其他办法吗?

编辑:

我没有向link_to添加额外参数,因为user_id实际上来自select标记,我想将所选值添加为额外数据,如下所示:

settings.data += ("&user_id="+$("#register_user_id option:selected").val());

这就是我link_to的样子:

  <%= text_field_tag :part_id, nil, :class => 'text_field', data: {source: autocomplete_parts_for_registers_registers_path} %>
  <%= link_to('toevoegen', '#!', id: 'part_btn', class: 'btn btn-small btn-success addbtn', style: "margin-top: 5px", data: {source: add_part_registers_path}, remote: true) %>

2 个答案:

答案 0 :(得分:0)

不要采用javascript方法,而是考虑使用link_to中的路径发送参数:

link_to "My link", some_path(user_id: 5), remote: true, method: :post

这会将:user_id的值{5}添加到some_path的控制器中的参数中。

此外,您可以使用链接上的data:属性添加您想要XHR请求的所有参数。

link_to "My link", id: "user_link", some_path, remote: true, method: :post, data: { params: { user_id: 123 }.to_param }

如果您需要动态更改值:

$("#user_select").change(function() {
  user_id = $(this).val();
  $("#user_link").data("params", "user_id=" + user_id);
})

In fact, it looks like this is exactly what Rails does to send AJAX values from jquery_ujs.

显然,请务必检查user_id服务器端的值。

答案 1 :(得分:0)

我认为当用户通过javascript或额外的ajax调用更改下拉列表时更新link_to的最佳和最简单的方法

JS
$("#user_select").change(function() {
  user_id = $(this).val();
  $("#user_link").data("params") = "user_id=" + user_id;
})

Extra Ajax
send user_id to server with user_id and make a method_name.js.erb and update link from there
like:
link_to "link", method_path(user_id: params[:user_id]), remote: true