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 :

Django et Ajax : problème callback


Sujet :

Django Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2
    Par défaut Django et Ajax : problème callback
    Bonjour,

    Quelqu'un saurait-il m'aider à corriger mon code ? Je débute avec Django et je n'ai pas réussi à trouvé de réponse à ma question malgré mes recherches. Merci d'avance !

    Mon problème: quand je clique sur Ajax Call Back button, j'ai le message suivant dans firebug :

    http://127.0.0.1:8000/planner/essai/...d%27%20%%7D200 OK 13ms

    ainsi que dans le champ post de firebug :

    person_name try (try étant ce que j'ai essayé d'envoyer via Ajax)

    Je suppose donc que la partie HTML et Jquery fonctionne correctement. Toutefois, try ne s'affiche pas dans le champ 'responseText'. En effet, la seule chose qui s'affiche est le code html complet de mon template essai.html.

    <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><!--CSS--><link href="/static/css/bootstrap.css" rel="stylesheet" type="text/css"/>...

    Je présume donc que le problème se situe au niveau de ma vue mais je n'arrive pas à corriger mon code pour que ma vue retourne dans 'responseText" ce que j'ai tapé.

    Voici mon code :

    essai.html:

    Code : 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
    <html>
    <head>
      <title> AJAX </title>,
      <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
      <script type="text/javascript" src="/static/js/ajax.js"></script>
    </head>
    <body>
      <div class="wrapper">
        <h3>Ajax Callback Introduction</h3>
        <div class='entry_wrapper'>
          <h4>Data to send back to server:</h4>
          <input type="text" size="50" id="input_text"/>
          <input type="button" value="Ajax Call Back" id='call_back_btn'/>
        </div>
     
        <div class='response_wrapper'>
          <textarea id='responseText'></textarea>
        </div>
    ajax.js:

    Code : 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
    $(document).ready(
      function()
      {
     
        $('#call_back_btn').click(function()
        {
     
          $.post("{% url 'friend' %}",
          {
     
            person_name: $("#input_text").val()
          },
            function(data)
            {
              $('#responseText').val(data)
            }
          );
     
        });
     
      }
    );
    views.py:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    from django.http import HttpResponse
    def friend(request):
      if request.method == 'POST':
        nom=request.POST.get("person_name")
        return HttpResponse (nom)
    urls.py:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    from django.conf.urls import patterns, url
    from planner import views
    urlpatterns = patterns('',
        url(r'^$', views.index, name='index'),
        url(r'^essai/', views.essai, name='essai'),
        url(r'^friend/', views.friend, name='friend'),
    )

  2. #2
    Membre expérimenté Avatar de Stopher
    Homme Profil pro
    Responsable technique
    Inscrit en
    Juin 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 198
    Par défaut
    Salut ,
    quel code HTTP as-tu en retour ? 200 / 404 / 500 ?
    as-tu géré le "csrf-token" pour tes requêtes Ajax ?

    Ch.

  3. #3
    Membre expérimenté Avatar de Stopher
    Homme Profil pro
    Responsable technique
    Inscrit en
    Juin 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 198
    Par défaut
    Il faut savoir aussi que textarea utilise innerHTML pour son contenu, et non l'attribut value

    tu devrais donc utiliser en js avec jquery

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $('#responseText').html(data);
    Ch.

  4. #4
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2
    Par défaut
    Tout d'abord merci de ta réponse.

    Ensuite, concernant le sujet csrf-token, je l'ai un peu mis de côté de la façon suivante pour le moment en commentant settings.py de la façon suivante:
    " #'django.middleware.csrf.CsrfViewMiddleware',"

    Concernant textarea, j'ai effectué la modification proposée ce qui me permet maintenant d'avoir non seulement une requête post mais aussi en retour une requête GET :

    Nom : ajax.jpg
Affichages : 302
Taille : 92,7 Ko


    Néanmoins, j'ai toujours mon code HTML de mon template essai.html qui s'affiche dans la text area.


    Depuis hier, pour tester si le problème venait de mon projet actuel, j'ai recommencé un projet. Pour configurer Django, j'ai suivi le tutoriel officiel pour m'assurer de faire les choses dans les règles pour débuter. J'ai juste comme précédemment commenté la ligne du csrf dans settings.py. Ensuite, j'ai intégré le code suivant.

    Donc nouveau projet, nouveau code et je me retrouve exactement avec le même problème. Je clique sur "send", j'ai un popup qui s'affiche et me colle encore du html.
    Voici un lien vers le dossier complet de ce dernier projet si ça peut aider :
    https://drive.google.com/folderview?...EE&usp=sharing

Discussions similaires

  1. [AJAX] Ajax fonction callback
    Par lirycs78 dans le forum AJAX
    Réponses: 2
    Dernier message: 20/09/2010, 23h02
  2. [AJAX] problème avec readyState
    Par Booyakha dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 20/04/2006, 16h52
  3. [AJAX] Utilisation de responseXml
    Par danyboy85 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 20/04/2006, 16h23
  4. AJAX : Problème avec les accents...
    Par @drien dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 29/01/2006, 14h33
  5. [AJAX] Problèmes avec les caractères accentués
    Par marti dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 26/10/2005, 14h10

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