2016-07-09 1 views
0

J'ai cet appel ajax qui active une action dans le contrôleur. Mon problème est que l'action ne reçoit pas les paramètres [: id] que les autres méthodes dans ce contrôleur ont. Je suppose que c'est parce qu'il obtient les paramètres de l'URL. Mais comment envoyer l'identifiant de la page en cours avec l'ajax?Envoi d'un paramètre id à json avec Rails, ajax

$.ajax({ 
    url: "/test", 
    type: "GET", 
    dataType: "json", 
    success: function(data) { 
     console.log(data); 
    }, 
    error: function() { 
     console.log("Ajax error!") 
    } 
}); 

Controller:

def test 
    @user = User.find(params[:id]) 
    render :json => { :name => @user.username }.to_json 
end 

NB: Le ajax est dans un fichier .js pas dans la vue. Et il est activé quand quelqu'un charge une page

Répondre

0

Vous voudrez peut-être ajouter votre ID de page actuelle comme une valeur cachée, dans le code HTML. Par exemple, dans example/current_view.html.erb, ajoutez partout cette ligne:

<%= hidden_field_tag :current_id, params[:id] %> 

Plus tard, vous pouvez accéder à cette valeur dans votre demande ajax et l'ajouter à l'URL, avec jquery:

$.ajax({ 
    url: "/test/" + $('#current_id').val(), 
    type: "GET", 
    ... 
}); 

Si vous n » Si vous souhaitez modifier la vue actuelle, vous pouvez analyser l'URL (située dans window.location.href) avec javascript et extraire l'ID avec des expressions régulières.

0

Vous n'envoyez aucun data au serveur. Pour des informations détaillées. reportez-vous à la documentation jquery ajax ici http://api.jquery.com/jquery.ajax/

Vous pouvez avoir une variable cachée sur la page qui stocke le id ou en faire un attribut de données.