2012-08-30 18 views
45

Il seguente codice attiva un GET invece di una richiesta HTTP POST.JQuery Ajax invia GET invece di 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 Controllare che il browser invii un GET. Ecco da Chrome:

Richiesta URL: http: // localhost/sample-CODICI/UPDATE% 20MYSQL/api/aggiungere/ Richiesta Metodo: GET Codice di stato: 200 OK


risolto

L'URL chiamato './api/add' stato quello di inviare effettivamente './api/add/index.php'. Risulta che chiamare './api/add /index.php' o './api/add /' mi dà una richiesta POST.

Era solo un URL errato, ma per qualche motivo stavo ottenendo una richiesta GET di successo in ".api/add /".

+2

Perché pensi che sarà una richiesta GET? –

+1

Hai provato a eseguire la chiamata ajax su firefox con il pannello di rete aperto su firebug? – fcalderan

+2

[Test] (http://jsfiddle.net/4gh7M/) - se esegui questa operazione e controlli il pannello di rete, scoprirai che invia una richiesta di posta –

risposta

2

Per me, il tuo pezzo di codice sguardo OK, ma se si vuole essere sicuri, è possibile utilizzare $ .post invece di $ .ajax

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

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

+4

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

+0

Sì, ma come il tuo codice sembra buono. quando lo sto testando, c'è qualche richiesta post –

1

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

72

Alcuni problemi su MVC. Per qualche motivo quando rimuovo [HttPost] funziona come previsto, anche se sto dicendo a aax di usare POST.

  • Si scopre è necessario utilizzare

tipo: "POST"

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

metodo: "P OST"

Ora è il POST

Ma dopo aver scavato nella documentazione ho trovato questo.

enter image description here

+4

questo è il problema che stavo facendo JUST. non ho capito che il nome dell'opzione è cambiato a 1.9. Ho pensato che fosse sempre "metodo" –

+1

Lo stesso di me ... lo stesso di me :) – ppumkin

+4

Mi hai appena salvato la vita !! +1 –

4

ho notato questo comportamento e dove il mio post è stato l'invio di un GET. Lo scenario è davvero unico, ma forse aiuterà qualcuno.

Questo mi accadeva nella pagina di modifica ruolo utente, dove stavo usando ajax (post) come azione immediata quando un ruolo era selezionato o deselezionato.

Ho anche configurato il server per autenticare nuovamente l'utente (e ridirigerli) ogni volta che le loro informazioni sui ruoli sono cambiate in modo che le loro attestazioni vengano aggiornate.

Il ciclo brutale finì come:

  1. primo aggiornamento di ruolo - POST - 200 successo

  2. ruolo successivo aggiornamento - POST - 302 Trovato -> Redirect (ho fatto non avviso di questo fino a quando ho usato Fiddler piuttosto che di rete del monitor di Chrome)

  3. reindirizzamento delle chiamate da (2) (stesso URL) - GET - 404 Not Found (Dal ho permesso solo Post)

  4. GOTO (1)

ho finito per cambiare il server di bypassare ri-autenticazione/sostiene aggiornamento quando ha rilevato una richiesta AJAX (in base ai tipi Accetta).

+0

Grazie mille! – machineaddict

1

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

ho avuto questo problema e per @ suggerimento di Fangle era perché il mio .htaccess stava rimuovendo finale barre - e avevo impostato l'url per /ajax/foo/bar/ e non /ajax/foo/bar. Il reindirizzamento modifica la richiesta da POST a GET. Rimuovi il/e problema risolto!

+0

Questo ha risolto il problema esatto menzionato nella domanda originale per me. Sto ospitando un'app di laravel su Wamp 3.0.6 – iko

+0

risolto per me, grazie –

2

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 campo contentType in una richiesta Ajax.

contentType: "application/json", 
1

Ho riscontrato questo problema e si è rivelato 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 di due pagine diverse.

Ad esempio:

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

vs

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

Questo, tuttavia, è stato in qualche modo che pasticciano con le mie richieste Ajax. Ho disabilitato la regola e il problema è stato risolto.

7

L'URL './api/add' in realtà è stato reindirizzato a './api/add/index.php'.quindi questa bizzarra lato-effetto che la nuova richiesta dopo che il reindirizzamento inviato utilizzando GET invece di POST

Soluzione

  • utilizzare l'URL completo './api/add/index.php'
  • o aggiungere una barra './api/add/'.
Problemi correlati