2016-06-17 7 views
0

Ich schreibe eine Google Chrome-Erweiterung, die einen jQuery.post() Aufruf verwendet, um Daten an eine externe Website zu senden. Die externe Website verarbeitet die Daten mithilfe eines Flask-Endpunkts und generiert ein Ergebnis. Leider bin ich mir nicht sicher, wie ich das Ergebnis zurück zum Client übertrage. Wie kann ich das machen?Wie kann JQuery mit Flask verbunden werden?

Ich habe versucht, einen render_template Anruf innerhalb Flasche mit, etwa so:

app.route("/my_endpoint", methods = ['POST']) 
def my_endpoint(): 
    print ('hi') # this statement prints 
    results = ... 
    if request.method == 'POST': 
     # want to eventually replace this with 
     # return render_template("results.html", results=results) 
     return render_template("test.html") 

Aber dies wird nicht geladen, tatsächlich die Seite test.html.

Ich habe auch versucht, die Daten wieder in der Chrome-Erweiterung überträgt einen Rückruf mit (die ich lieber nicht, wenn möglich tun), wie in

post_results = function(input_data) { 
    jQuery.post("my_flask_endpoint", 
     input_data, 
     function (data, textStatus, jqXHR) { 
      ... 
     } 

, aber ich bin nicht sicher, was zu setzen in der Callback-Funktion, weil es scheint, dass "Daten" eine Menge von HTML ist, und ich weiß nicht, wie man Seiten nur mit einer HTML-Zeichenfolge (im Gegensatz zu der URL) lädt.

Antwort

1

Es ist gut, dass data eine Menge HTML ist, denn das ist genau das, was Sie gesendet haben! render_template ist die Jinja2-Funktion, die Sie verwenden, um eine bestimmte Seite zu einem Benutzer anzuzeigen, und am Ende ist alles, was HTML ist. Sie geben das HTML-Rendering test.html als die Daten zurück.

Was (glaube ich) Sie versuchen, zu tun ist, entweder geben die „Ergebnisse“ Objekt, oder Auslöser eine Umleitung zu /results nach POST-/my_endpoint ing?

Je nachdem, was Sie mit den Daten vorhaben, könnten Sie in beide Richtungen gehen.

Wenn Sie die Daten an die aktuelle Seite des Benutzers/den jQuery-Rückruf zurücksenden möchten, geben Sie einfach results als JSON zurück (vorausgesetzt, dass Ergebnisse ein Wörterbuch sind). Eine detailliertere Erklärung von jsonify kann here

return flask.jsonify(**results) 

Alternativ zu finden, wenn Sie auf eine andere Seite zu navigieren planen, um die Ergebnisse anzuzeigen, müssen Sie entscheiden, ob Sie Flask wollen die Umleitung durchführen und die Daten machen mit results.html als Vorlage, oder leiten Sie die Ergebnisse an den Client weiter, lassen Sie ihn navigieren und übertragen Sie die empfangenen Daten selbst.

Verwandte Themen