100 votes

JQuery Ajax envoie GET au lieu de POST

Le code suivant déclenche une requête HTTP GET au lieu d'une requête POST.

function AddToDatabase() {
  this.url = './api/add';
}

AddToDatabase.prototype.postData = function(dataToPost) {
$.ajax({
    type: "POST",
    url: this.url,
    data: dataToPost,
    context: this,
    success: this.onSuccess
  });
};

var AddToDatabase = new AddToDatabase();
data = {data: 'coucou'};
AddToDatabase.postData(data);

Pourquoi, et comment puis-je obtenir un POST ?


Je vois dans Google Chrome Inspect et Firefox Inspect que le navigateur envoie un GET. Voici un extrait de Chrome :

URL de la demande : http://localhost/SAMPLE-CODES/UPDATE%20MYSQL/api/add/ Méthode de requête:GET Code d'état:200 OK


SOLVED

L'URL appelée './api/add' devait en fait poster vers './api/add/index.php'. Il s'avère que l'appel de './api/add /index.php ou './api/add / ' me donne une requête POST.

Il s'agissait simplement d'une mauvaise URL, mais pour une raison quelconque, je recevais une requête GET réussie vers '.api/add/'.

113voto

ppumkin Points 3543

Quelques problèmes sur MVC. Pour une raison quelconque, lorsque je supprime le [HttPost], cela fonctionne comme prévu, même si je demande à ajax d'utiliser POST.

  • Il s'avère que vous devez utiliser

type : "POST"

  • Même si l'exemple sur la page de jQuery dit qu'il faut utiliser

méthode : "POST

Maintenant, c'est POST

Mais après avoir creusé dans la documentation, j'ai trouvé ceci.

enter image description here

35voto

texelate Points 1157

J'ai eu ce problème et, selon la suggestion de @FAngle, c'est parce que mon .htaccess supprimait les slashs de fin de ligne - et j'avais défini l'url comme suit /ajax/foo/bar/ et non /ajax/foo/bar . La redirection change la requête de POST en GET. Supprimez le / et le problème est résolu !

11voto

Jossef Harush Points 1656

L'URL './api/add' a en fait été redirigé vers './api/add/index.php' . donc cet effet secondaire bizarre que la nouvelle demande après la redirection envoyée en utilisant GET au lieu de POST

Solution

  • utiliser l'url complète './api/add/index.php'
  • ou ajouter une barre oblique './api/add/' .

8voto

tonejac Points 83

J'ai constaté qu'en utilisant dataType: 'jsonp' il convertit la demande en un GET . Je l'ai changé en dataType: 'json' il est passé de GET a POST .

7voto

emragins Points 433

J'ai également remarqué ce comportement où mon POST envoyait un GET. Le scénario est assez unique, mais peut-être que cela aidera quelqu'un.

Cela m'est arrivé sur ma page de modification des rôles d'utilisateur, où j'utilisais ajax (post) comme action immédiate lorsqu'un rôle était coché ou décoché.

J'ai également configuré le serveur pour qu'il réauthentifie l'utilisateur (et le redirige) chaque fois que les informations relatives à son rôle changent, afin que ses revendications soient actualisées.

Le cycle brutal s'est terminé ainsi :

  1. Première mise à jour du rôle -- POST -- 200 succès

  2. Next Role Update -- POST -- 302 Found -> Redirect (Je n'ai pas jusqu'à ce que j'utilise Fiddler plutôt que le moniteur réseau de Chrome. de Chrome)

  3. Rediriger l'appel de (2) (même URL) -- GET -- 404 Not Found (depuis j'ai seulement autorisé Post)

  4. GOTO (1)

J'ai fini par modifier le serveur pour qu'il contourne la réauthentification/mise à jour des revendications lorsqu'il détecte une requête ajax (en fonction des types d'acceptation).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X