Le code suivant déclenche une requête GET au lieu d'une requête HTTP 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 de Chrome:
URL de la requête: http: // localhost / SAMPLE-CODES / UPDATE% 20MYSQL / api / add / Méthode de requête: GET Code d'état: 200 OK
RÉSOLU
L'URL appelée «./api/add» devait en fait publier sur «./api/add/index.php». Il s'avère que l'appel «./api/add /index.php
» ou «./api/add /
» me donne une requête POST.
C'était juste une mauvaise URL, mais pour une raison quelconque, j'obtenais une requête GET réussie à '.api / add /'.
Réponses:
Un problème sur MVC. Pour une raison quelconque, lorsque je supprime le [HttPost], cela fonctionne comme prévu, même si je dis à ajax d'utiliser POST.
Maintenant c'est POST
Mais après avoir fouillé dans la documentation, j'ai trouvé ceci.
la source
{ method : "POST", type: "POST" }
J'ai eu ce problème et selon la suggestion de @ FAngle, c'était parce que mon .htaccess supprimait les barres obliques de fin - et j'avais défini l'URL sur
/ajax/foo/bar/
et non/ajax/foo/bar
. La redirection change la demande de POST à GET. Supprimez le / et le problème est résolu!la source
L'URL
'./api/add'
a été redirigée vers'./api/add/index.php'
. donc ce côté bizarre affecte que la nouvelle requête après la redirection envoyée en utilisantGET
au lieu dePOST
Solution
'./api/add/index.php'
'./api/add/'
.la source
J'ai également remarqué ce comportement là où mon POST envoyait un GET. Le scénario est assez unique, mais peut-être qu'il aidera quelqu'un.
Cela m'arrivait sur ma page de modification de rôle 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 ré-authentifier l'utilisateur (et le rediriger) chaque fois que les informations de son rôle changent afin que leurs revendications soient actualisées.
Le cycle brutal s'est terminé comme suit:
Mise à jour du premier rôle - POST - 200 succès
Prochaine mise à jour du rôle - POST - 302 trouvés -> Redirection (je n'ai pas remarqué cela jusqu'à ce que j'utilise Fiddler plutôt que le moniteur réseau de Chrome)
Rediriger l'appel de (2) (même URL) - GET - 404 Not Found (puisque j'ai seulement autorisé la publication)
GOTO (1)
J'ai fini par changer le serveur pour contourner la mise à jour de la ré-authentification / des revendications lorsqu'il a détecté une demande ajax (basée sur les types d'acceptation).
la source
J'ai constaté que lors de son utilisation,
dataType: 'jsonp'
il convertissait la demande en un fichierGET
. Je l'ai changé endataType: 'json'
il est passé deGET
àPOST
.la source
J'ai eu un problème similaire et cela a commencé à fonctionner pour moi dès que j'ai supprimé le code en dur
https://
de mon URL.jQuery.ajax({ type: "POST", url: "www.someurl.com",//instead of "https://www.someurl.com" data: { foo:"bar"}, success: function(d){ console.log(d); }, dataType: "JSONP" });
la source
Pour moi, votre morceau de code semble correct, mais si vous voulez être sûr, vous pouvez utiliser $ .post au lieu de $ .ajax
$.post('ajax/test.html', function(data) { $('.result').html(data); });
lien jquery: http://api.jquery.com/jQuery.post/
la source
post
est juste une méthode abrégée pour $ .ajax ({type: 'POST'})Consultez votre fichier .htaccess ou recherchez un autre élément susceptible de rediriger votre demande
la source
J'ai eu le même problème et j'ai trouvé cette question mais les réponses n'ont pas résolu mon problème. Je finis par le résoudre en supprimant le
contentType
champ dans la requête ajax.contentType: "application/json",
la source
J'ai eu ce problème, et il s'est avéré qu'il s'agissait d'un module de réécriture d'URL dans IIS.
J'utilise ASP.NET MVC et WebAPI. J'ai créé une règle pour forcer les URL minuscules afin que les réseaux sociaux ne voient pas la même URL que deux pages différentes.
Par exemple:
" http://url.com/View/Something/123GuidIdSomething "
contre
" http://url.com/view/something/123guididsomething "
Cependant, cela dérangeait en quelque sorte mes requêtes ajax. J'ai désactivé la règle et le problème a été résolu.
la source
une erreur très courante est que nous utilisons le type de bouton comme soumettre et que nous ne changeons pas la méthode du formulaire (qui est obtenue par défaut)
assurez-vous de ne pas utiliser le type de bouton Soumettre et si vous avez changé la méthode du formulaire pour publier
la source