HTTP PUT n'est pas entièrement inter-navigateur, Rails (j'utilise Rails 3) prend en charge l'utilisation de POST et transmet le paramètre de requête _method
. C'est génial, mais cela ne semble pas fonctionner lors de l'envoi de JSON.Utilisation de HTTP PUT pour envoyer JSON avec Jquery et Rails 3
Exemple:
$.ajax({
url: window.location.pathname,
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({_method:'PUT', page:{my_data: 1}),
dataType: 'json'
});
Quand Rails voit cela, il ne reconnaît pas la override '_method' parce qu'il est passé au format JSON (peut-être que la conversion est plus tard?). Rails renvoie une erreur "No route matches ..." disant qu'il ne peut pas trouver le chemin (à la ressource), je suppose parce qu'il ne correspond pas à la mise à jour REST = HTTP PUT verbe, j'ai même essayé d'ajouter ceci à l'URL: ?_method=PUT
mais a obtenu le même résultat.
La seule chose qui ne semble au travail met en en-tête HTTP:
$.ajax({
url: window.location.pathname,
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({my_data: 1}),
dataType: 'json',
beforeSend: function(xhr){
xhr.setRequestHeader("X-Http-Method-Override","put");
}
});
Le réglage du override tête HTTP la meilleure façon?
Il semble que la plupart des navigateurs Web aient pris en charge directement la méthode (PUT POST DELETE pour XmlHTTPRequests), il est donc facile de dire que cela fonctionne correctement sans définir l'en-tête supplémentaire ou le paramètre '_method'. Mon erreur d'origine a été provoquée par le mélange de PUT/POST lors du routage vers les rails. Il semble que la plupart des navigateurs Web aient supporté cela (PUT POST DELETE pour XmlHTTPRequests), donc on peut dire que ça marche très bien. Mon erreur d'origine a été causée par le mélange de PUT/POST lors du routage vers les rails. –
Avez-vous déjà compris pourquoi la version supérieure ne fonctionne pas? – digitalWestie