Maison  >  Questions et réponses  >  le corps du texte

javascript - Comment accepter les données JSON envoyées par JQuery depuis Flask?

L'application flask accepte les données json du front-end, mais la requête flask ne les accepte pas avec succès. Elle ne contient aucune donnée et elle ne fonctionne pas même après avoir modifié de nombreuses fonctions.
code js

$(function(){
    $("#test").click(function(){
        $.ajax({
            url: "{{ url_for('main.getjson') }}",
            type: "POST",
            data: JSON.stringify({
                "n1": "test1",
                "n2": "test2",
                "n3": "test3"
            }),
            dataType: "json",
            success: function(data){
                var a = data.user
                var texthtml = "<p>" + a + "</p>"
                $("#result").html(texthtml)
            }
        });
    });
});

Afficher les fonctions dans le flacon :

@main.route('/getjson', methods = ['GET', 'POST'])
def getjson():
    a = request.json
    if a:
        return jsonify(user = "Right")
    return jsonify(user = "error")

Détermine uniquement si request.json existe, mais la chaîne renvoyée est toujours "erreur". Il y a toujours null dans request.json. Plus tard, j'ai modifié request.args.get(), mais cela n'a pas fonctionné non plus. Où me suis-je trompé ? Je demande sincèrement des conseils.

漂亮男人漂亮男人2711 Il y a quelques jours625

répondre à tous(3)je répondrai

  • 高洛峰

    高洛峰2017-05-18 11:03:48

    J'ai trouvé la réponse, c'était juste un problème avec la partie jquery. Le paramètre contentType de $.ajax est par défaut "application/x-www-form-urlencoded". Vous devez définir ce paramètre sur application/json.

    $.ajax({
            url: "{{ url_for('main.getjson') }}",
            type: "POST",
            data: JSON.stringify({
                "n1": "test1",
                "n2": "test2",
                "n3": "test3"
            }),
            contentType: "application/json",
            dataType: "json",
            success: function(data){
                var a = data.user
                var texthtml = "<p>" + a + "</p>"
                $("#result").html(texthtml)
            }
        });

    Référence : https://flask.readthedocs.io/...
    http://stackoverflow.com/ques...

    répondre
    0
  • 天蓬老师

    天蓬老师2017-05-18 11:03:48

    L'ajax de jquery ne nécessite pas JSON.stringify lors de l'envoi de données, il les gérera automatiquement.

    répondre
    0
  • 迷茫

    迷茫2017-05-18 11:03:48

    D'après votre description, vous avez trouvé le problème, pourquoi ne pas continuer à l'essayer, ou lire la documentation

    @app.route('/api', methods=['POST'])
    def api():
        a = request.json
        b = request.get_data()
        c = request.values
        print a
        print b
        print c
        if a:
            return 'ok'
        return 'error one'

    Résultats de sortie

    None
    {"id":1}
    CombinedMultiDict([ImmutableMultiDict([]), ImmutableMultiDict([('{"id":1}', u'')])])

    request.json est très étrange. Il n'a vraiment aucune donnée, mais il peut être utilisé. La raison pour laquelle il n'est pas utile ici est la suivante :

    json Si le type MIME est application/json, cela contiendra les données
    JSON analysées. Sinon, ce sera None. La méthode get_json() devrait
    être utilisée à la place.
    Mais lorsque j'utilise get_json(), elle signale impitoyablement une AttributeError. : L'objet 'Request' n'a pas d'attribut 'get_json'

    Je n'ai donc utilisé avec succès request.json qu'une seule fois, mais je n'ai plus jamais réussi, car c'est magique. Si vous pouvez trouver une alternative à request.json, s'il vous plaît.

    répondre
    0
  • Annulerrépondre