2016-05-05 2 views
3

J'ai un link_to avec remote: mis à vrai. Ce que je veux faire est d'ajouter un attribut supplémentaire à la demande, donc je l'ai essayé avec ceci:Ajouter des données supplémentaires dans ajax: beforeSend (link_to)?

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

Maintenant, je ne sais même pas si cela est possible parce que le user_id est jamais envoyé au contrôleur et quand je connectez-vous le setting.data Je reçois null&user_id=5.

Si ce n'est pas possible comme ça, y a-t-il un autre moyen de le faire?

EDIT:

Je n'ai pas ajouter un paramètre supplémentaire à la link_to parce que le user_id vient en fait d'une balise select et je voulais ajouter la valeur sélectionnée en tant que données supplémentaires comme celui-ci:

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

c'est ce que mon link_to ressemble:

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

Répondre

0

plutôt que de prendre l'approche javascript, envisagez d'envoyer les params avec la route dans e e link_to:

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

Cela ajoutera :user_id avec une valeur de 5 à params dans le contrôleur pour some_path.

En outre, vous pouvez utiliser l'attribut data: sur le lien pour ajouter les paramètres que vous souhaitez à la requête XHR.

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

Si vous devez changer la valeur dynamique:

$("#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.

De toute évidence, assurez-vous de vérifier la valeur de user_id côté serveur.

+0

je pensais de cela aussi, mais je veux envoyer une valeur sélectionnée à partir d'une sélection tag, j'ai simplement simplifié mon code pour qu'il soit plus facile à lire (peut-être pas une bonne idée). – Kupi

+0

Ok, alors vous pouvez changer dynamiquement la valeur de 'data-params =" user_id = 5 "' en utilisant l'événement '$ ('# user_select'). Change'. –

+0

Ok, je vais essayer celui-ci en premier, mais est-il impossible d'ajouter des données dans l'ajax: beforeSend? – Kupi

0

Je pense que la meilleure et la plus simple de mettre à jour link_to lors déroulant changement d'utilisateur en javascript ou un appel ajax supplémentaire

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