wake-up-neo.net

wie kann ich daten aus ajax in flask verwenden?

Ich habe Probleme, Daten von Jquery Ajax POST zu bekommen.

$('#clickme').click( function() {
    var data = save_input(); // data

    data['_sid'] = $survey_id;  // survey_id injected from flask
    data['_uip'] = $user_ip; // user_ip injected from flask, request.remote_addr

    $.ajax({
        type : "POST",
        url : "{{ url_for('mod.load_ajax') }}",
        data: JSON.stringify(data),
        contentType: 'application/json;charset=UTF-8',
        success: function(result) {
            console.log(result);
        }
    });

    console.log(data);
});

aus dem Code ist data ein Javascript-Objekt wie

{
    'foo' : 'foo',
    'bar' : 'bar',
    'fo_' : 42,
}

was ich versuche in flask zu tun ist:

@mod.route('/load_ajax', methods=["GET", "POST"])
def load_ajax():
    if request.method == "POST":
        # load _sid and _uip from posted JSON and save other data
        # but request.form is empty.
        # >>> request.form
        # ImmutableMultiDict([]) 
        return str(request.form)

siehe, die Ajax-Anfrage wird gestellt, aber es werden keine Daten übermittelt. Ich mache console.log(data) mit ajax, damit ich sehen kann, dass ich wirklich einige aussagekräftige Daten in data variable in jquery habe. request.form in ajax view ist jedoch leer. Wo werden meine Daten übermittelt? 

57
thkang

Versuchen 

 $.ajax({
    type : "POST",
    url : "{{ url_for('mod.load_ajax') }}",
    data: JSON.stringify(data, null, '\t'),
    contentType: 'application/json;charset=UTF-8',
    success: function(result) {
        console.log(result);
    }
});

Dann können Sie vom Server aus auf die Variablen in Daten wie folgt verweisen: 

request.json['foo']

Da der Inhaltstyp als application/json angegeben ist, befinden sich die Daten in request.json.

62
phabtar

Gemäß Ihrem Beispiel senden Sie kein Schlüsselwertpaar, sondern weisen der Datenoption jQuery eine JSON-Zeichenfolge zu. Wie in den Kommentaren erwähnt, müssen Sie Ihre JSON-Zeichenfolge festlegen, ein Objekt mit einem Schlüssel erstellen (der für den Zugriff auf die JSON-Zeichenfolge aus der Flasche verwendet wird) und dem jQuery-Datenschlüssel zuweisen.

    $.ajax({
            type : "POST",
            url : "{{ url_for('mod.load_ajax') }}",
            data: {json_str: JSON.stringify(data)},
            contentType: 'application/json;charset=UTF-8',
            success: function(result) {
                console.log(result);
            }
        });

    @mod.route('/load_ajax', methods=["GET", "POST"])
    def load_ajax():
        if request.method == "POST":
            # load _sid and _uip from posted JSON and save other data
            # but request.form is empty.
            # >>> request.form
            # ImmutableMultiDict([]) 
            return str(request.form['json_str']
     )
13
Ifthikhan

Haben Sie versucht, contentType zu entfernen? Sie nehmen an, Daten an Flask zu senden.

könnten Sie versuchen, gefälschte Daten hinzuzufügen, wie

daten: {"Hallo": "Welt"} in Ajax? Nur um zu prüfen, ob die Hallo-Welt bei request.form ankommt

1
Granit

Verwenden Sie auf der Seite des Kolbens:

data = request.get_json()

Die variablen Daten enthalten jetzt das Wörterbuch, das Sie mit Ajax gesendet haben, und Sie können es jetzt mit Python bearbeiten

0
Patrick Mutuku