jQuery.getJSON 不会触发回调

Posted

技术标签:

【中文标题】jQuery.getJSON 不会触发回调【英文标题】:jQuery.getJSON doesn't trigger callback 【发布时间】:2010-10-09 01:11:02 【问题描述】:

我有一个 html 代码:

<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 没有给出任何错误。其他一切都是正确的。 问候 克里斯

【问题讨论】:

您是否已备份并尝试将其作为纯文本只是为了好玩? 【参考方案1】:

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

【讨论】:

【参考方案2】:

很可能是 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 运行输出以验证它。

【讨论】:

您能否指出或解释一下如何使用 FireBug 检查 JSON? 当然。我假设您在 FF 中安装了 FireBug,如果您没有安装,请告诉我。 FireBug 在 XHR 选项卡中跟踪您的所有 ajax 请求。在此处展开​​请求,然后单击“响应”选项卡。您将在那里看到 JSON 或其他响应文本。祝你好运! 您需要在您提供的代码中再关闭一个大括号。【参考方案3】:

我不久前遇到了这个问题,并为 jQuery 的 Ajax 重写了一个包装器,它允许您传递正常的 getJSON 和每个 get 的附加错误回调。

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

【讨论】:

【参考方案4】:

我认为您在 url 模式中缺少尾随 $。

【讨论】:

以上是关于jQuery.getJSON 不会触发回调的主要内容,如果未能解决你的问题,请参考以下文章

JSONP 的 getJSON 回调有啥意义?

带有jQuery getJSON(回调)的JSONP公共API(MySql)

PHP 带有jQuery getJSON(回调)的JSONP公共API(MySql)

jQuery.getJSON(url, [data], [callback])

JQuery getJson 成功函数在按钮单击时触发

jQuery.getJSON相关的。。求助啊~~求助~~