JQuery Ajax sta inviando GET invece di POST


87

Il codice seguente attiva una richiesta GET invece di una richiesta 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);

Perché e come posso ottenere un POST?


Vedo in Google Chrome Inspect e Firefox Inspect che il browser invia un GET. Ecco da Chrome:

URL richiesta: http: // localhost / SAMPLE-CODES / UPDATE% 20MYSQL / api / add / Metodo richiesta: GET Codice di stato: 200 OK


RISOLTO

L'URL chiamato "./api/add" doveva effettivamente postare su "./api/add/index.php". Risulta che la chiamata "./api/add /index.php" o "./api/add /" mi dà una richiesta POST.

Era solo un URL sbagliato, ma per qualche motivo stavo ricevendo una richiesta GET di successo a ".api / add /".


2
Perché pensi che sarà una richiesta GET?
Viktor S.

1
Hai provato a eseguire la chiamata ajax su Firefox con il pannello di rete aperto su Firebug?
Fabrizio Calderan

2
Test : se eseguirai questo e controllerai il pannello di rete, scoprirai che invia una richiesta di post
Viktor S.

1
@tucson - come ho già scritto - controlla il tuo file .htaccess. Forse fa reindirizzare invece di riscrivere. Fondamentalmente, vedo che JS è OK (aspetto quel punto nell'url "./api/add" che mi confonde). Quindi sembra più un problema lato server. E le informazioni nella tua domanda non sono sufficienti per fornire un aiuto specifico
Viktor S.

1
Aggiungi la soluzione come risposta per favore
Adam Lynch

Risposte:


101

Qualche problema su MVC. Per qualche motivo, quando rimuovo [HttPost] funziona come previsto, anche se sto dicendo ad ajax di usare POST.

  • Si scopre che devi usare

tipo: "POST"

  • Anche se l'esempio sulla pagina jQuery dice di usare

metodo: "POST"

Ora è POST

Ma dopo aver scavato nella documentazione ho trovato questo.

inserisci qui la descrizione dell'immagine


6
questo è il problema che stavo APPENA avendo. non si rendeva conto che il nome dell'opzione veniva cambiato in 1.9. Pensavo fosse sempre "metodo"
Bill Garrison,

2
Non vedo alcun problema con l'inclusione di entrambi solo per essere sicuro. { method : "POST", type: "POST" }
Scott

Sì, puoi includere tutto ciò che vuoi nel costruttore, ma includerli entrambi per compatibilità non ha davvero senso. La maggior parte delle persone utilizzerà la 1.11 o la 2.1 in qualsiasi modo. Questo causa solo un problema dopo l'aggiornamento come da 1.4.3 o 1.6.2
Piotr Kula

3
Ho passato così tanto tempo a cercare di risolvere questo problema venerdì aggiornando un vecchio frontend per utilizzare un'API nuova di zecca. Grazie mille!
NobleUplift

31

Ho avuto questo problema e secondo il suggerimento di @ FAngle era perché il mio .htaccess stava rimuovendo le barre finali - e avevo impostato l'URL su /ajax/foo/bar/e non /ajax/foo/bar. Il reindirizzamento modifica la richiesta da POST a GET. Rimuovi la / e il problema è risolto!


Questo ha risolto il problema esatto menzionato nella domanda originale per me. Sto ospitando un'app Laravel su Wamp 3.0.6
İlter Kağan Öcal

10

L'URL è stato './api/add'effettivamente reindirizzato a './api/add/index.php'. quindi questo bizzarro effetto collaterale che la nuova richiesta dopo il reindirizzamento ha inviato utilizzando GETinvece diPOST

Soluzione

  • usa l'URL completo './api/add/index.php'
  • o aggiungi una barra './api/add/'.

6

Ho notato questo comportamento anche quando il mio POST inviava un GET. Lo scenario è piuttosto unico, ma forse aiuterà qualcuno.

Questo mi stava accadendo nella mia pagina di modifica del ruolo utente, dove stavo usando ajax (post) come azione immediata quando un ruolo veniva selezionato o deselezionato.

Ho anche configurato il server per autenticare nuovamente l'utente (e reindirizzarlo) ogni volta che le informazioni sul ruolo cambiano in modo che le loro attestazioni vengano aggiornate.

Il ciclo brutale è finito come:

  1. Primo aggiornamento del ruolo - POST - 200 successi

  2. Next Role Update - POST - 302 Found -> Redirect (Non l'ho notato fino a quando non ho usato Fiddler anziché il monitor di rete di Chrome)

  3. Reindirizza chiamata da (2) (stesso URL) - GET - 404 non trovato (poiché ho consentito solo la pubblicazione)

  4. GOTO (1)

Ho finito per cambiare il server per bypassare la riautenticazione / l'aggiornamento delle attestazioni quando ha rilevato una richiesta ajax (basata sui tipi di accettazione).


Grazie mille!
macchineaddict

Woah! Di fronte a qualcosa di simile. Apparentemente, nel mio livello di controller, si aspettava un parametro di sessione che non ho incluso nel nuovo endpoint del controller, e stava facendo un 302 e poi un GET. Grazie compagno.
Nimila Hiranya,

5

Ho scoperto che quando lo si utilizza dataType: 'jsonp'converte la richiesta in un file GET. L'ho cambiato in dataType: 'json'è cambiato da GETa POST.


Sei tu il motivo per cui è stato osservato questo comportamento?
Saurabh Sarathe

@SaurabhSarathe - JSONP funziona generando elementi di script che possono generare solo richieste GET.
Quentin

3

Ho avuto un problema simile e ha iniziato a funzionare per me non appena ho rimosso l'hardcoded https://dal mio 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"
});

Questo suona più come un problema tra HTTP e HTTPS (cioè il tuo www.someurl.com non ha un certificato valido)
Alexis Wilke

2

Per me, il tuo pezzo di codice sembra a posto, ma se vuoi essere sicuro, puoi usare $ .post invece di $ .ajax

$.post('ajax/test.html', function(data) {
 $('.result').html(data);
});

collegamento jquery: http://api.jquery.com/jQuery.post/


8
postè solo un metodo abbreviato per $ .ajax ({type: 'POST'})
Viktor S.

Sì, ma come il tuo codice sembra buono. quando lo provo, fa qualche richiesta di post
Mr_DeLeTeD

1

Controlla il tuo file .htaccess o cerca qualche altra cosa che possa reindirizzare la tua richiesta


1

Ho avuto lo stesso problema e ho trovato questa domanda ma le risposte non hanno risolto il mio problema. Alla fine lo risolvo rimuovendo il contentTypecampo nella richiesta ajax.

contentType: "application/json",

1

Ho riscontrato questo problema e si è scoperto essere un modulo di riscrittura degli URL in IIS.

Sto usando ASP.NET MVC e WebAPI. Ho creato una regola per forzare gli URL minuscoli in modo che i social network non visualizzino lo stesso URL come due pagine diverse.

Per esempio:

" http://url.com/View/Something/123GuidIdSomething "

vs

" http://url.com/view/something/123guididsomething "

Questo, tuttavia, stava in qualche modo incasinando le mie richieste ajax. Ho disabilitato la regola e il problema è stato risolto.


0

un errore molto comune è che stiamo usando il tipo di pulsante come submit e non stiamo cambiando il metodo per il modulo (che è get per impostazione predefinita)

assicurati di non utilizzare il tipo di pulsante invia e se lo fai hai cambiato il metodo del modulo per postare

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.