2009-02-21 96 views
25

我有一个HTML代码:jQuery.getJSON不会触发回调

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

和相应的视图:

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

视图被执行(使用print测试),json变量被初始化,但没有警报出现。我做错了什么?我已经看到了一些文档(例如http://docs.jquery.com/Ajax/jQuery.getJSON#urldatacallback),但我没有找到答案。

编辑:问题是,没有导入HttpResponse ...不幸的是Django没有提供任何关于它的错误。其他一切都是正确的。 尊敬
chriss

+0

你是否已经备份并以纯文本的形式尝试过踢球? – Sampson 2009-02-21 13:35:41

回答

47

这可能是json不正确的形成。有时候这发生在我身上,当我的代码,应该是生产json产生一个错误。有两个选项:

  • 使用Firebug查看JSON响应

  • 安装错误使用jQuery.ajaxSetup选项,比如在你的jQuery代码处理:

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

使用用于调试的错误处理非常好,因为当您的响应出现问题时您会立即知道。你可以看看jQuery documentation for jQuery.ajax,它有jQuery.ajaxSetup的所有可用选项。

编辑:第三种方法是打开应该生成JSON的URL并通过JSON Lint运行输出来验证它。

+0

您可以指点或解释如何使用FireBug检查JSON吗? – chriss 2009-02-24 10:35:31

3

您确定JSON有效吗?直接看看响应或使用Firebug

0

我认为你缺少的URL模式尾随$。