2010-03-09 5 views
2

J'essaie de comprendre comment les appels Django + Jquery et Ajax fonctionnent ensemble.Django: Quel est le problème avec mon expérience ajax simple?

C'est simplement un simple/test/url qui montre un seul formulaire d'entrée, une fois soumis récupère la réponse du serveur via ajax.

Pour que j'ai écrit une très petite:

def test(request): 
    if request.is_ajax(): 
     from django.http import HttpResponse 
     post_text = request.POST.get("post_data") 
     return HttpResponse("{'response_text': '"+post_text+" recieved.'}", mimetype="application/json") 
    else: 
     return render_to_response('test.html', {},context_instance =RequestContext(request)) 

Et je l'ai écrit cette règle URL pour mon URLPATTERN au urls.py:

(r'^test/$', 'myapp.views.test'), 

Et voici mon test. modèle html:

<html> 
    <head><title>template</title></head> 

    <script type="text/javascript" src="/media/js/jquery.js"></script> 

    <script type="text/javascript"> 
    $(document).ready(function() { 
     $('#post_form').submit(function(event){ 
      event.preventDefault(); // cancel the default action 
      var form = this; 
      var data = {} 
      data.post_data = $(form).find('input[@name=our_text]').val(); 

      $.post("/test/", 
       data, 
       function(responseData) { 
        alert(responseData.response_text); 
       }, 
       "json" 
      ); 
     }); 
    }); 
    </script> 

    <body> 
    <form id="post_form" method="post"> 
     INPUT: <input type="text" name="our_text" /> 
     <input type="submit" value="Add" /> 
    </form> 
    </body> 
</html> 

Il ne semble pas faire une réponse sur mon www.mysite.com/test/ une fois que je remplis le champ de saisie et s ubmit. Quel peut être le problème?

+0

Votre vue est appelée? Est-ce que vos données POST sont celles que vous attendez d'elles? Aussi, je recommanderais d'utiliser le module json pour gérer l'encodage vers json. –

+1

Est-ce que Firebug montre une erreur de quelque sorte? –

Répondre

5

jQuery 1.4 ne parser JSON invalide. Comme Alex Gaynor mentionné, votre JSON est invalide, car il utilise des guillemets simples, plutôt que des guillemets doubles.

JSON écriture à la main est stupide. Utilisez une bibliothèque Pour convertir les types de données python en JSON, encore une fois, comme l'a mentionné Alex, Django vous envoie déjà le fichier simplejson.Si vous utilisez Python2.6 ou une version ultérieure, json fait partie de la bibliothèque standard http://docs.python.org/library/json.html

from django.http import HttpResponse 
from django.utils import simplejson 

def test(request): 
    if request.is_ajax(): 
     post_text = request.POST.get("post_data") 
     response_dict = {'response_text': '"+post_text+" recieved.'} 
     return HttpResponse(simplejson.dumps(response_dict), mimetype="application/json") 
    else: 
     return render_to_response('test.html', {},context_instance =RequestContext(request)) 
+0

travaille maintenant, merci pour le snipllet! – Hellnar

4

Les clés JSON des objets (dictionnaires) doivent être entre guillemets ", pas des guillemets simples" Vous devriez vraiment utiliser une vraie bibliothèque JSON, comme simplejson (inclus avec django à django.utils.simplejson) pour générer votre JSON.

+0

Merci pour votre réponse, j'ai vérifié le lien, mais encore confus comment appliquer simplejson à mon avis. – Hellnar

Questions connexes