jQuery.getJSON ne déclenche pas de rappel
-
05-09-2019 - |
Question
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')
Le point de vue est exécuté (testé à l'aide print
), variable json
est initialisée mais pas d'alerte apparaît. Qu'ai-je fait de mal? Je l'ai déjà vu des documents sur ce ( http://docs.jquery.com/Ajax/jQuery.getJSON#urldatacallback par exemple) mais je n » ai pas t trouver une réponse.
EDIT: Le problème a été que HttpResponse
n'a pas été importé ... Malheureusement, Django a pas d'erreur à ce sujet. Tout le reste était correct.
ce qui a trait
chriss
La solution
Il est probable que le JSON est pas correctement formé. Parfois, cela arrive à moi quand mon code, qui devrait être produit JSON génère une erreur. Deux options:
-
Utilisez firebug pour afficher la réponse JSON
-
Erreur de configuration dans le traitement de 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 l'erreur de manipulation pour le débogage est grande, puisque vous saurez immédiatement quand il y a un problème avec votre réponse. Vous pouvez consulter la documentation jQuery pour jQuery.ajax qui a toutes les options disponibles pour jQuery.ajaxSetup.
EDIT: Une troisième option serait de simplement ouvrir l'URL qui devrait produire le JSON et le rediriger vers JSON Lint pour valider.
Autres conseils
Êtes-vous sûr que le JSON est valide? jetez un oeil à la réponse directement ou utiliser Firebug
Je suis tombé sur ce tout à l'heure et réécrit une enveloppe pour l'Ajax jQuery qui vous permet de passer la getJSON normale 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/
Je pense que vous manquez le $ de fuite dans le modèle d'URL.