Axios: La publication n'envoie pas correctement les données

Créé le 18 août 2016  ·  3Commentaires  ·  Source: axios/axios

Bonjour,
J'ai une application Django où je veux faire du POST en cliquant sur <button> qui n'est pas dans <form>
Le problème est que les données envoyées à la fonction de visualisation ne sont pas envoyées correctement.

Voici le code axios :

 axios({
        method: 'post',
        url: '/url/to/view'
        data: {
            obj_id: objectid,
            content_type: contenttype,
            like: !is_liked
        },
        xsrfCookieName: 'csrftoken',
        xsrfHeaderName: 'X-CSRFToken',
        headers: {'X-Requested-With': 'XMLHttpRequest',
                  'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'},
    }).then(function (response) { 
        console.log(response);
    });

et ici voir le code :

def my_view(request):
    print request.POST
    return HttpResponse('XX')

Je ne peux pas accéder aux données request.POST car la clé est un dict entier et une liste vide de valeurs :
<QueryDict: {u'{"obj_id":"182","content_type":"video","like":true}': [u'']}>

Commentaire le plus utile

Le problème est que les objets sont sérialisés en JSON par défaut alors que vous devez envoyer les données au format `application/x-www-form-urlencoded'. La solution la plus simple est d'utiliser une bibliothèque comme qs :

var qs = require('qs');
axios.post('/foo', qs.stringify({ 'bar': 123 });

Voir ce commentaire pour plus de détails.

J'espère que cela t'aides!

Tous les 3 commentaires

Le problème est que les objets sont sérialisés en JSON par défaut alors que vous devez envoyer les données au format `application/x-www-form-urlencoded'. La solution la plus simple est d'utiliser une bibliothèque comme qs :

var qs = require('qs');
axios.post('/foo', qs.stringify({ 'bar': 123 });

Voir ce commentaire pour plus de détails.

J'espère que cela t'aides!

Une autre façon consiste à mettre les valeurs dans l'objet FormData et à publier

J'ai écrit un petit wrapper autour d'axios qui fonctionne bien avec les paramètres par défaut de Django >1.8. J'espère que cela aide quelqu'un !

Cette page vous a été utile?
0 / 5 - 0 notes