não jQuery.getJSON não desencadear callback
-
05-09-2019 - |
Pergunta
Eu tenho um código html:
<button>asd</button>
<script type = "text/javascript">
$('button').click(
function() {
$.getJSON('/schedule/test/', function(json) {
alert('json: ' + json + ' ...');
});
}
);
</script>
e vista correspondente:
def test(request):
if request.method == 'GET':
json = simplejson.dumps('hello world!')
return HttpResponse(json, mimetype = 'application/json')
A visão é executado (testado usando print
), variável json
é inicializado, mas não aparece alerta. O que eu fiz errado? Eu já vi alguns docs sobre isso ( http://docs.jquery.com/Ajax/jQuery.getJSON#urldatacallback por exemplo), mas eu não' t encontrar uma resposta.
EDIT: O problema era que HttpResponse
não foi importado ... Infelizmente Django deu nenhum erro sobre ele. Tudo o resto foi correta.
relação
chriss
Solução
É provável que o JSON não está devidamente formado. Às vezes isso acontece comigo quando meu código, que deve produzir json está gerando um erro. Duas opções:
-
Use o Firebug para ver a resposta JSON
-
erro de instalação manipulação em seu código jQuery usando as opções jQuery.ajaxSetup tais como:
$.ajaxSetup({"error":function(XMLHttpRequest,textStatus, errorThrown) { alert(textStatus); alert(errorThrown); alert(XMLHttpRequest.responseText); }});
Usando a manipulação de erro para depuração é grande, já que você vai saber imediatamente quando há um problema com a sua resposta. Você pode conferir o documentação do jQuery para jQuery.ajax que tem todas as opções disponíveis para jQuery.ajaxSetup.
EDIT: Uma terceira opção seria apenas para abrir a URL que deve ser gerar o JSON e executar a saída através JSON Lint para validá-lo.
Outras dicas
Tem certeza que o JSON é válido? dar uma olhada na resposta direta ou usar o Firebug
Eu corri para este um tempo atrás e reescreveu um wrapper para Ajax do jQuery que lhe permite passar o getJSON normal e um retorno de chamada de erro adicional por get.
http://www.nurelm.com/themanual/2010/08/09/self-indulgent-code-jquery-getjson-with-error-handling/
Eu acho que você está faltando o $ arrastando no padrão de URL.