2016-05-05 2 views
3

У меня есть link_to с remote: установлен в true. То, что я хочу сделать, это добавить дополнительный атрибут с просьбой, чтобы я попробовал его с этим:Добавить дополнительные данные в ajax: beforeSend (link_to)?

<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.

Если это не так, есть ли другой способ сделать это?

EDIT:

Я не добавить дополнительный параметр в 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) %> 

ответ

0

Вместо того, чтобы брать яваскрипт подхода, считает отправить Params с маршрутом в го е link_to:

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

Это добавит :user_id со значением 5 к Params в контроллере для 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 на стороне сервера.

+0

Я думал об этом, как хорошо, но я хочу, чтобы отправить значение, выбранное из избранных tag, я просто упростил свой код, поэтому его легче читать (может быть, не очень хорошая идея). – Kupi

+0

Итак, вы можете динамически изменять значение 'data-params =" user_id = 5 "', используя событие '$ ('# user_select'). Change'. –

+0

Хорошо, сначала попробую это, но нет ли способа добавить данные в ajax: beforeSend? – Kupi

0

Я думаю, что лучший и самый простой способ обновления link_to при смене пользователя выпадающий на Javascript или дополнительный Аякса вызов

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 
Смежные вопросы