2014-09-27 9 views
22

Sul lato server, sto solo stampando la JSON-as-dizionario alla consoleFlask, come restituire un codice di stato di successo per la chiamata AJAX

@app.route('/',methods=['GET','POST']) 
@login_required 
def index(): 
    if request.method == "POST": 
     print request.json.keys() 
    return "hello world" 

Ora, ogni volta che faccio una richiesta POST via ajax, la console stampa il dizionario con i contenuti di cui ho bisogno.

Sul lato client, ho cercato di utilizzare vari metodi per eseguire jquery in base a una chiamata ajax di successo. Ho appena realizzato che questo potrebbe essere un errore sul mio lato server, cioè non sto inviando alcuna intestazione di richiesta per dire a jquery che la sua chiamata ajax è stata un successo.

Quindi, come posso inviare uno stato OK al mio cliente per dire che va tutto bene?

Per ragioni di completezza, ecco il mio codice lato client

$.ajax({ 
    type: 'POST', 
    contentType: 'application/json', 
    data: JSON.stringify(myData), 
    dataType: 'json', 
    url: '/', 
    success: function() { 
     console.log("This is never getting printed!!") 
    }}); 
+0

Hai provato a restituire una stringa JSON valida invece del semplice testo 'ciao mondo'? Si specifica che il tipo di dati di ritorno è json, ma jquery probabilmente non può decodificare "ciao mondo", quindi la funzione di successo non viene mai chiamata. –

+0

@PeterGibson il "ciao mondo" viene restituito su una richiesta GET. Non restituisco nulla su POST. – yayu

+1

@PeterGibson era davvero il problema. Ho messo un 'return 'OK'' e sta funzionando ora. Puoi inviare una risposta se vuoi. – yayu

risposta

29

About Responses in Flask:

Chi Risposte

Il valore restituito da una funzione di visualizzazione viene automaticamente convertito in un oggetto di risposta per te. Se il valore restituito è una stringa, viene convertito in un oggetto risposta con la stringa come corpo della risposta, un codice di errore 200 OK e un mimo tipo text/html. La logica che Flask applica a convertire i valori di ritorno in oggetti di risposta è la seguente:

  1. Se un oggetto risposta del tipo corretto viene restituito è direttamente restituito dalla vista.
  2. Se si tratta di una stringa, viene creato un oggetto risposta con tali dati e i parametri predefiniti.
  3. Se viene restituita una tupla, gli elementi nella tupla possono fornire ulteriori informazioni. Tali tuple devono essere nella forma (response, status, headers) dove almeno un elemento deve essere nella tupla. Il valore dello stato sostituirà il codice di stato e le intestazioni possono essere un elenco o un dizionario di valori di intestazione aggiuntivi.
  4. Se nessuna di queste funzioni, Flask assumerà che il valore restituito sia un'applicazione WSGI valida e la converta in un oggetto risposta.

Quindi, se si torna stringa di testo (come si sta facendo), il codice di stato che la chiamata AJAX deve ricevere è 200 OK, e il callback il successo deve essere in esecuzione. Tuttavia, ti consiglio di restituire una risposta in formato JSON come:

return json.dumps({'success':True}), 200, {'ContentType':'application/json'} 
Problemi correlati