web-dev-qa-db-fra.com

jQuery.getJSON ne déclenche pas de rappel

J'ai un code html:

<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ée (testée avec print), la variable json est initialisée mais aucune alerte n'apparaît. Qu'ai-je fait de mal? J'ai déjà vu des documents 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’était pas importé ... Malheureusement, Django n’a fait aucune erreur à ce sujet. Tout le reste était correct. Cordialement
chriss

25
chriss

Il est probable que le JSON n’est pas correctement formé. Parfois, cela m’arrive lorsque mon code, qui devrait produire JSON, génère une erreur. Deux options:

  • Utilisez firebug pour afficher la réponse JSON

  • Erreur de configuration dans votre code jQuery à l’aide des options jQuery.ajaxSetup telles que:

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

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

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

47
jonstjohn

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

3
Andrew Bullock

Je me suis heurté à cela il ya quelque temps et j'ai réécrit un wrapper pour Ajax de jQuery qui vous permet de passer le getJSON normal et un rappel d'erreur supplémentaire par get.

http://www.nurelm.com/themanual/2010/08/09/self-indulgent-code-jquery-getjson-with-error-handling/

1
Paul

Je pense que vous manquez le dernier motif de $ in url.

0
Prabhat Gupta