Der folgende Code löst ein GET anstelle einer POST-HTTP-Anforderung aus.
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);
Warum und wie kann ich einen POST bekommen?
Ich sehe in Google Chrome Inspect und Firefox Inspect, dass der Browser ein GET sendet. Hier ist von Chrome:
Anforderungs-URL: http: // localhost / SAMPLE-CODES / UPDATE% 20MYSQL / api / add / Anforderungsmethode: GET-Statuscode: 200 OK
Gelöst
Die URL mit dem Namen "./api/add" sollte tatsächlich unter "./api/add/index.php" veröffentlicht werden. Es stellt sich heraus, dass der Aufruf von './api/add /index.php
' oder './api/add /
' mir eine POST-Anfrage gibt.
Es war nur eine falsche URL, aber aus irgendeinem Grund erhielt ich eine erfolgreiche GET-Anfrage an '.api / add /'.
Antworten:
Ein Problem mit MVC. Aus irgendeinem Grund funktioniert es wie erwartet, wenn ich [HttPost] entferne, obwohl ich Ajax anweise, POST zu verwenden.
Jetzt ist es POST
Aber nachdem ich die Dokumentation durchgesehen hatte, fand ich dies.
quelle
{ method : "POST", type: "POST" }
Ich hatte dieses Problem und laut @ FAngles Vorschlag lag es daran, dass mein .htaccess nachgestellte Schrägstriche entfernte - und ich hatte die URL auf
/ajax/foo/bar/
und nicht gesetzt/ajax/foo/bar
. Die Umleitung ändert die Anforderung von POST zu GET. Entfernen Sie das / und Problem gelöst!quelle
Die URL wurde
'./api/add'
tatsächlich umgeleitet'./api/add/index.php'
. daher dieser bizarre Nebeneffekt, den die neue Anfrage nach der Weiterleitung mitGET
anstelle von gesendet hatPOST
Lösung
'./api/add/index.php'
'./api/add/'
.quelle
Ich habe dieses Verhalten auch bemerkt, als mein POST ein GET gesendet hat. Das Szenario ist ziemlich einzigartig, aber vielleicht hilft es jemandem.
Dies geschah mir auf meiner Seite zum Bearbeiten von Benutzerrollen, auf der ich Ajax (Post) als sofortige Aktion verwendete, wenn eine Rolle aktiviert oder deaktiviert wurde.
Ich hatte auch den Server so konfiguriert, dass er den Benutzer erneut authentifiziert (und umleitet), wenn sich seine Rolleninformationen ändern, damit seine Ansprüche aktualisiert werden.
Der brutale Zyklus endete als:
Erstes Rollenupdate - POST - 200 Erfolg
Nächstes Rollenupdate - POST - 302 gefunden -> Weiterleiten (Ich habe dies erst bemerkt, als ich Fiddler anstelle des Chrome-Netzwerkmonitors verwendet habe)
Anruf von (2) umleiten (gleiche URL) - GET - 404 nicht gefunden (da ich nur Post erlaubt habe)
GOTO (1)
Am Ende habe ich den Server geändert, um die erneute Authentifizierung / Aktualisierung der Ansprüche zu umgehen, als eine Ajax-Anforderung (basierend auf den Akzeptiertypen) festgestellt wurde.
quelle
Ich habe festgestellt, dass bei Verwendung
dataType: 'jsonp'
die Anfrage in eine konvertiert wirdGET
. Ich änderte siedataType: 'json'
sich von geändertGET
zuPOST
.quelle
Ich hatte ein ähnliches Problem und es begann für mich zu funktionieren, sobald ich den fest codierten
https://
von meiner URL entfernt hatte.quelle
Für mich sieht Ihr Code in Ordnung aus, aber wenn Sie sicher sein möchten, können Sie $ .post anstelle von $ .ajax verwenden
jquery link: http://api.jquery.com/jQuery.post/
quelle
post
ist nur eine Kurzmethode für $ .ajax ({Typ: 'POST'})Überprüfen Sie Ihre .htaccess-Datei oder suchen Sie nach etwas anderem, das Ihre Anfrage umleiten könnte
quelle
Ich hatte das gleiche Problem und fand diese Frage, aber die Antworten lösten mein Problem nicht. Ich löse es schließlich, indem ich das
contentType
Feld in der Ajax-Anfrage entferne .quelle
Ich hatte dieses Problem und es stellte sich heraus, dass es sich um ein URL-Rewrite-Modul in IIS handelt.
Ich verwende ASP.NET MVC und WebAPI. Ich habe eine Regel erstellt, um URLs in Kleinbuchstaben zu erzwingen, damit soziale Netzwerke nicht dieselbe URL wie zwei verschiedene Seiten anzeigen.
Beispielsweise:
" http://url.com/View/Something/123GuidIdSomething "
vs.
" http://url.com/view/something/123guididsomething "
Dies war jedoch irgendwie mit meinen Ajax-Anfragen durcheinander. Ich habe die Regel deaktiviert und das Problem wurde behoben.
quelle
Ein sehr häufiger Fehler ist, dass wir den Schaltflächentyp als Senden verwenden und die Methode für das Formular nicht ändern (die standardmäßig abgerufen wird).
Stellen Sie sicher, dass Sie nicht den Schaltflächentyp "Senden" verwenden. Wenn Sie dies tun, haben Sie die Formularmethode zum Posten geändert
quelle