【问题标题】:Add extra data in ajax:beforeSend (link_to)?在 ajax:beforeSend (link_to) 中添加额外数据?
【发布时间】:2016-08-30 23:26:19
【问题描述】:

我有一个 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&amp;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) %>

【问题讨论】:

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


    【解决方案1】:

    我认为当用户通过 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
    

    【讨论】:

      【解决方案2】:

      与其采用javascript方法,不如考虑在link_to中发送带有路由的参数:

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

      这会将值为 5 的:user_id 添加到控制器中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 server-side 的值。

      【讨论】:

      • 我也想过这个,但我想发送一个从选择标签中选择的值,我只是简化了我的代码,这样更容易阅读(也许不是一个好主意)。
      • 好的,那么您可以使用$('#user_select').change 事件动态更改data-params="user_id=5" 的值。
      • 好的,我先试试这个,但是没有办法在 ajax:beforeSend 中添加数据吗?
      • 我认为没有简单的方法。甚至 Rails 本身也不会修改 ajax:beforeSend 来发送参数,它使用上面的方法,我认为这是更干净的方法,因为您可以更轻松地从 Rails 控制台进行调试。我不确定settings 是否是只读的。如果这是一个GET 请求,您可以使用settings.url += &amp;newProp=newValue 附加到URL。虽然不是 100% 确定。
      • $("#user_link").data("params") = "user_id=" + user_id; 给我“必须是左值”错误,这是正确的编辑方法吗?
      猜你喜欢
      • 1970-01-01
      • 2016-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-21
      • 2012-07-14
      • 1970-01-01
      相关资源
      最近更新 更多