Poniższy kod wyzwala GET zamiast żądania 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);
Dlaczego i jak mogę otrzymać POST?
Widzę w Google Chrome Inspect i Firefox Inspect, że przeglądarka wysyła GET. Oto z Chrome:
Adres URL żądania: http: // localhost / SAMPLE-CODES / UPDATE% 20MYSQL / api / add / Metoda żądania: GET Kod stanu: 200 OK
ROZWIĄZANY
Adres URL o nazwie „./api/add” miał faktycznie wysyłać do „./api/add/index.php”. Okazuje się, że wywołanie „./api/add /index.php
” lub „./api/add /
” daje mi żądanie POST.
To był po prostu zły adres URL, ale z jakiegoś powodu otrzymałem udane żądanie GET do „.api / add /”.
Odpowiedzi:
Jakiś problem na MVC. Z jakiegoś powodu, kiedy usuwam [HttPost], działa to zgodnie z oczekiwaniami, mimo że mówię Ajax, aby używał POST.
Teraz to POST
Ale po przekopaniu się w dokumentacji znalazłem to.
źródło
{ method : "POST", type: "POST" }
Miałem ten problem i zgodnie z sugestią @ FAngle było to spowodowane tym, że mój .htaccess usuwał końcowe ukośniki - i ustawiłem adres URL na,
/ajax/foo/bar/
a nie/ajax/foo/bar
. Przekierowanie zmienia żądanie z POST na GET. Usuń / i problem rozwiązany!źródło
Adres URL
'./api/add'
faktycznie został przekierowany do'./api/add/index.php'
. dlatego ten dziwaczny efekt boczny, który nowe żądanie po przekierowaniu wysłało za pomocąGET
zamiastPOST
Rozwiązanie
'./api/add/index.php'
'./api/add/'
.źródło
Zauważyłem to zachowanie, gdy mój POST wysyłał GET. Scenariusz jest dość wyjątkowy, ale może komuś pomoże.
Stało się to ze mną na mojej stronie edycji roli użytkownika, gdzie używałem ajax (post) jako natychmiastowej akcji, gdy rola została zaznaczona lub odznaczona.
Skonfigurowałem również serwer, aby ponownie uwierzytelniał użytkownika (i przekierowywał go) za każdym razem, gdy zmieniły się informacje o jego roli, aby ich roszczenia zostały odświeżone.
Brutalny cykl zakończył się następująco:
Pierwsza aktualizacja roli - POST - 200 sukcesów
Następna aktualizacja roli - POST - Znaleziono 302 -> Przekierowanie (nie zauważyłem tego, dopóki nie użyłem programu Fiddler zamiast monitora sieci Chrome)
Przekieruj połączenie z (2) (ten sam adres URL) - GET - 404 nie znaleziono (ponieważ zezwalałem tylko na wysyłanie wiadomości)
GOTO (1)
Skończyło się na tym, że zmieniłem serwer, aby ominął ponowne uwierzytelnianie / aktualizację oświadczeń, gdy wykrył żądanie ajax (w oparciu o typy akceptacji).
źródło
Zauważyłem, że podczas korzystania z
dataType: 'jsonp'
niego konwertuje żądanie na plikGET
. Zmieniłem to nadataType: 'json'
zmieniło się zGET
naPOST
.źródło
Miałem podobny problem i zaczęło działać dla mnie, gdy tylko usunąłem zakodowany na stałe
https://
z mojego adresu 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" });
źródło
Dla mnie Twój fragment kodu wygląda dobrze, ale jeśli chcesz mieć pewność, możesz użyć $ .post zamiast $ .ajax
$.post('ajax/test.html', function(data) { $('.result').html(data); });
jquery link: http://api.jquery.com/jQuery.post/
źródło
post
to tylko skrótowa metoda dla $ .ajax ({type: 'POST'})Sprawdź swój plik .htaccess lub poszukaj czegoś, co może przekierować Twoje żądanie
źródło
Miałem ten sam problem i znalazłem to pytanie, ale odpowiedzi nie rozwiązały mojego problemu. Ostatecznie rozwiązuję to, usuwając
contentType
pole w żądaniu Ajax.contentType: "application/json",
źródło
Miałem ten problem i okazało się, że jest to moduł ponownego zapisywania adresów URL w usługach IIS.
Używam ASP.NET MVC i WebAPI. Stworzyłem regułę, która wymusza małe adresy URL, aby sieci społecznościowe nie wyświetlały tego samego adresu URL na dwóch różnych stronach.
Na przykład:
„ http://url.com/View/Something/123GuidIdSomething ”
vs
„ http://url.com/view/something/123guididsomething ”
To jednak w jakiś sposób zakłócało moje żądania Ajax. Wyłączyłem regułę i problem został rozwiązany.
źródło
bardzo częstym błędem jest to, że używamy typu przycisku jako przesyłania i nie zmieniamy metody dla formularza (która jest domyślnie pobierana)
upewnij się, że nie używasz przycisku typu wyślij, a jeśli tak, to zmieniłeś metodę formularza na post
źródło