2010-09-11 11 views
5

Utilizzo Google App Engine, Jquery e Django. Voglio dati POST da inviare al lato server quando viene inviato un modulo e io farlo in JQuery con il seguente codice:jQuery La richiesta AJAX viene chiamata due volte quando si utilizza Jquery, Django e Google App Engine

$("#listform").submit(function() { 
      $.ajax({ 
        type: "POST", 
        url: "/xhrtest", 
        data: {'name': 'herman'}, 
        success: function(data){ 
          console.log(data) 
        } 
      }); 
    }) 

A mio avviso Django:

def xhrtest(request): 
     if request.method == "POST": 
       return HttpResponse("Post data!") 
     else: 
       return HttpResponse("GET request.") 

avrei dovrebbe ricevere una risposta di "Post data!", ma in qualche modo la risposta è sempre "GET request". Anche questo non è un problema unicode, dal momento che si può stampare il metodo request.method e vedere "GET".

Nel valutare questo in Firebug, vedo passare due richieste: prima una richiesta POST, che riceve la risposta "GET request". e poi una richiesta GET, che riceve la risposta "Richiedi richiesta". anche. Nella console di sviluppo di Google App Engine posso anche vedere passare due richieste. La richiesta POST viene soddisfatta con una risposta 301 e GET con 200.

Che cosa significa e che cosa devo fare essere in grado di ricevere i dati POST?

+0

Is request.method (nel codice django) nel caso corretto? Se è "post", non sarà uguale a "POST". – kevingessner

+0

Qualche configurazione del server sta reindirizzando le tue richieste POST, sembra. (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html) – mkoistinen

risposta

11

Il problema è quasi certamente che si sta richiedendo l'url /xhrtest, senza una barra finale. Per impostazione predefinita, Django reindirizzerà quella richiesta a /xhrtest/ - con una barra finale - e tale reindirizzamento sarà un GET, non un POST.

Per ulteriori informazioni, vedere l'impostazione APPEND_SLASH che configura questo comportamento e il modulo CommonMiddleware che lo utilizza.

+0

Grazie, questo lo ha risolto. Non sapevo che Django avesse un comportamento predefinito. –

Problemi correlati