Je rencontre un problème très étrange avec Rails et ajax en utilisant jQuery (bien que je ne pense pas que ce soit spécifique à jQuery).
Mon application Rails utilise le magasin de session des cookies, et j'ai un login très simple qui définit l'identifiant de l'utilisateur dans la session. Si l'ID utilisateur n'est pas défini dans la session, l'application redirige vers une page de connexion. Cela fonctionne sans problème. Les requêtes JQuery GET fonctionnent bien aussi. Le problème est que lorsque je fais une requête POST jQuery, le navigateur envoie le cookie de session sans problème (je l'ai confirmé avec Firebug et en vidant request.cookies dans le journal) mais la session est vide, c'est-à-dire que la session est {}.
Je fais ça dans mon application.js :
$(document).ajaxSend(function(e, xhr, options) {
var token = $("meta[name='csrf-token']").attr('content');
xhr.setRequestHeader('X-CSRF-Token', token);
});
et voici mon exemple de poste :
$.post('/test/1', { _method: 'delete' }, null, 'json');
qui doit aboutir à cette méthode du contrôleur (_method : delete) :
def destroy
respond_to do |format|
format.json { render :json => { :destroyed => 'ok' }.to_json }
end
end
En regardant le journal et en utilisant Firebug, je peux confirmer que la valeur correcte du cookie est envoyée dans l'en-tête de la requête lorsque le post ajax se produit, mais il semble qu'à un moment donné, Rails perde cette valeur et donc la session, de sorte qu'il redirige vers la page de connexion et n'arrive jamais à la méthode.
J'ai essayé tout ce que j'ai pu imaginer pour déboguer ce problème, mais je commence à penser qu'il s'agit peut-être d'un bug de Rails. J'utilise Rails 3.0.4 et jQuery 1.5 si cela peut aider. Je trouve très étrange que les requêtes get et post normales (c'est-à-dire sans ajax) fonctionnent, que les requêtes get ajax fonctionnent sans problème, mais que les posts ajax ne fonctionnent pas.
Toute aide pour tenter de résoudre ce problème serait grandement appréciée !
Merci beaucoup,
Dave