IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Django Python Discussion :

Requête AJAX avec django


Sujet :

Django Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Requête AJAX avec django
    Salut à tous ceux qui me lisent.
    Bon je veux faire communiquer mon front et mon back(django) via ajax.

    Le problème est que je n'arrive pas à récupérer la variable transmise depuis la requête POST ajax.

    Le code javaScript est le suivant

    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    $(function() {
                  // console.log(JSON.parse(window.localStorage.getItem('articles')));
     
                  var csrftoken = Cookies.get('csrftoken');
     
                function csrfSafeMethod(method) {
                    // these HTTP methods do not require CSRF protection
                    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
                }
     
                $.ajaxSetup({
                    beforeSend: function (xhr, settings) {
                        if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
                            xhr.setRequestHeader("X-CSRFToken", csrftoken);
                        }
                    }
                });            
     
                  // ajax call on the cart chekout
                  const articles = JSON.parse(window.localStorage.getItem('articles'));
                  function callAjax(f) {
                    $.ajax({
                        url: '/management/check_cart/',
                        dataType: 'json',
                        contentType: 'application/json; charset=utf-8',
                        data: {art: articles,},
                        type: 'POST',
                        success: f,
                        error: function(error) {
                            console.log(error.statusCode);
                        }
                    });
                }
     
                function callback(response) {
                    const r = JSON.parse(response);
                    console.log("Voici le retour du serveur : " + r);
                }
     
                $('#check_cart').click(function() {
                    callAjax(callback);
                  });
              });
    Notez que j'utilise une lib javaScript Cookie pour récupérer le csrftoken.

    La vue django correspondante est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def check_cart(request):
        """ Receive a articles dict data from the frontend and
        show it(with full details) as cart """
     
        if request.method == "POST":
            if request.is_ajax():
                articles = request.POST.get('art', None)
                print(articles)
            data = {"articles": articles}
            return JsonResponse(data)
        return render(request, 'management/cart.html')
    Je vous présente l'erreur (qui en gros veut dire que l'objet articles est vide) :
    TypeError: the JSON object must be str, bytes or bytearray, not NoneType
    Donc c'est ça ! J'espère avoir été assez claire pour avoir des réponses sans trop de difficultés.
    Et merci d'avance...

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 817
    Points : 7 110
    Points
    7 110
    Par défaut
    Bonsoir,

    Je vous présente l'erreur ( qui en gros veux dire que l'objet articles est vide ):
    Possible, mais si on lit la documentation, respectez-vous la condition qui permet à is_ajax de fonctionner ?

    Que vous dis le print(articles) ? le résultat s'affiche-t-il ? Si non, votre is_ajax ne fonctionne clairement pas... et dans ce cas articles est une variable inexistante car non déclarée préalablement.

    Le message dit que vous devez avoir une chaîne de caractères et non un objet de type None.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par fred1599 Voir le message

    Que vous dis le print(articles) ? le résultat s'affiche-t-il ? Si non, votre is_ajax ne fonctionne clairement pas... et dans ce cas articles est une variable inexistante car non déclarée préalablement.

    Le message dit que vous devez avoir une chaîne de caractères et non un objet de type None.
    Merci de me repondre; mais OUI le print fonctionne et affiche None.
    Ce qui veux dire que le is_ajax() = True !

  4. #4
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 817
    Points : 7 110
    Points
    7 110
    Par défaut
    Bonsoir,

    Au lieu de print(articles), affichez plutôt un,

    car j'ai un doute sur le fait que la clé art existe...
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

Discussions similaires

  1. [Python 3.X] Requêtes AJAX avec Django 2.1.5
    Par parice02 dans le forum Django
    Réponses: 2
    Dernier message: 19/12/2018, 12h15
  2. Encoder l'url lors d'une requête ajax avec IE
    Par Tristan Zwingelstein dans le forum jQuery
    Réponses: 1
    Dernier message: 28/12/2009, 10h39
  3. [Dojo] Requête AJAX avec paramètre avec DOJO
    Par Tavarez59 dans le forum Bibliothèques & Frameworks
    Réponses: 10
    Dernier message: 19/06/2009, 13h50
  4. [JQuery] Requête ajax avec jQuery
    Par ApheX2 dans le forum jQuery
    Réponses: 3
    Dernier message: 28/08/2008, 22h40
  5. [MooTools] requête ajax avec Mootools
    Par oneTime dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 14/04/2008, 10h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo