3

我有一个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 实际上来自选择标记,我想将选定的值添加为额外的数据,如下所示:

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) %>
4

2 回答 2

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);
})

事实上,看起来这正是 Rails 从 jquery_ujs 发送 AJAX 值所做的事情。

显然,一定要检查user_id服务器端的值。

于 2016-05-05T08:48:12.140 回答
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
于 2016-05-05T09:02:38.657 回答