2014-09-27 11 views
22

Na stronie serwera, jestem po prostu drukując json-as-słownika do konsoliKolba, jak zwracają kod stanu sukces dla wywołania ajax

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

Teraz, kiedy robię żądania POST poprzez ajax, konsola wypisuje słownik z zawartością, której potrzebuję.

Po stronie klienta próbowałem użyć różnych metod, aby wykonać jquery na podstawie udanego wywołania ajax. Właśnie zdałem sobie sprawę, że może to być błąd na moim serwerze, tj. Nie wysyłam żadnego nagłówka żądania, aby powiedzieć jquery, że jego wywołanie ajaxa zakończyło się sukcesem.

Jak wysłać status OK do mojego klienta, aby powiedzieć mu, że wszystko jest w porządku?

Dla kompletności, tutaj jest mój kod stronie klienta

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

Czy próbowałeś zwrócić poprawny ciąg JSON zamiast zwykłego tekstu 'hello world'? Określasz typ danych zwrotnych json, ale jquery prawdopodobnie nie może dekodować "hello world", więc funkcja success nigdy nie jest wywoływana. –

+0

@PeterGibson "Witaj świecie" jest zwracany na żądanie GET. Nie zwracam niczego na POST. – yayu

+1

@PeterGibson, który był rzeczywiście problemem. Położyłem "powrót" OK'' i jego działanie teraz. Możesz przesłać odpowiedź, jeśli chcesz. – yayu

Odpowiedz

29

About Responses w Kolby:

O Responses

Wartość zwracana z funkcji widoku zostanie automatycznie przekształcony w obiekt odpowiedzi dla ciebie. Jeśli zwracana wartość jest łańcuchem znaków, jest przekształcana w obiekt odpowiedzi z łańcuchem jako treścią odpowiedzi, kodem błędu 200 OK i typem MIME typu text/html. Logika, którą Flask stosuje do przekształcania wartości zwracanych w obiekty odpowiedzi, jest następująca:

  1. Po zwróceniu obiektu odpowiedzi odpowiedniego typu, jest on bezpośrednio zwracany z widoku.
  2. Jeśli jest łańcuchem, tworzony jest obiekt odpowiedzi z tymi danymi i parametrami domyślnymi.
  3. Po zwróceniu krotki przedmioty w krotce mogą dostarczyć dodatkowych informacji. Takie krotki muszą mieć formę (response, status, headers), gdzie co najmniej jeden przedmiot musi znajdować się w krotce. Wartość statusu zastąpi kod statusu, a nagłówek może być listą lub słownikiem dodatkowych wartości nagłówka.
  4. Jeśli nic z tego nie zadziała, Flask przyjmie wartość zwracaną jest prawidłową aplikacją WSGI i przekształci ją w obiekt odpowiedzi.

Tak więc, jeśli wrócisz tekst (jak robisz), kod stanu, że wywołanie AJAX musi otrzymać to 200 OK, a Twój sukces zwrotna musi być wykonywany. Jednak zalecam zwrócić sformatowaną odpowiedź JSON, taką jak:

return json.dumps({'success':True}), 200, {'ContentType':'application/json'} 
Powiązane problemy