2009-02-21 12 views
25

J'ai un code html:jQuery.getJSON ne déclenche pas le rappel

<button>asd</button> 
<script type = "text/javascript"> 
$('button').click(
    function() { 
     $.getJSON('/schedule/test/', function(json) { 
      alert('json: ' + json + ' ...'); 
     }); 
    } 
); 
</script> 

et vue correspondante:

def test(request): 
    if request.method == 'GET': 
     json = simplejson.dumps('hello world!') 
     return HttpResponse(json, mimetype = 'application/json') 

La vue est exécuté (testé à l'aide print), la variable json est initialisée mais aucune alerte n'apparaît. Qu'ai-je fait de mal? J'ai déjà vu quelques docs sur ce sujet (http://docs.jquery.com/Ajax/jQuery.getJSON#urldatacallback par exemple) mais je n'ai pas trouvé de réponse.

EDIT: Le problème était, que HttpResponse n'a pas été importé ... Malheureusement Django n'a donné aucune erreur à ce sujet. Tout le reste était correct. salutations
chriss

+0

Avez-vous sauvegardé et essayé en texte brut juste pour les coups de pied? – Sampson

Répondre

47

Il est probable que le json ne soit pas correctement formé. Parfois cela m'arrive quand mon code, qui devrait produire json génère une erreur. Deux options:

  • Utilisez Firebug pour afficher la réponse JSON

  • erreur d'installation de manipulation dans votre code jquery en utilisant les options de jQuery.ajaxSetup telles que:

    $.ajaxSetup({"error":function(XMLHttpRequest,textStatus, errorThrown) { 
         alert(textStatus); 
         alert(errorThrown); 
         alert(XMLHttpRequest.responseText); 
        }}); 
    

Utilisation de la la gestion des erreurs pour le débogage est excellente, car vous saurez immédiatement s'il y a un problème avec votre réponse. Vous pouvez consulter le jQuery documentation for jQuery.ajax qui a toutes les options disponibles pour jQuery.ajaxSetup.

EDIT: Une troisième option consisterait simplement à ouvrir l'URL qui devrait générer le JSON et à exécuter la sortie via JSON Lint pour le valider.

+0

Pourriez-vous me montrer ou expliquer comment vérifier JSON avec FireBug? – chriss

+1

Bien sûr. Je suppose que vous avez FireBug installé dans FF, laissez-moi savoir si vous n'avez pas. FireBug garde la trace de toutes vos requêtes ajax dans l'onglet XHR. Développez la requête et cliquez sur l'onglet "réponse". Vous verrez le JSON ou un autre texte de réponse ici. Bonne chance! – jonstjohn

+0

Vous devez fermer un autre crochet bouclé dans le code que vous avez fourni. –

3

Êtes-vous sûr que le JSON est valide? jetez un oeil à la réponse directement ou utilisez Firebug

0

Je pense que vous manquez le $ de fuite dans le modèle d'URL.