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 不会触发回调的主要内容,如果未能解决你的问题,请参考以下文章
带有jQuery getJSON(回调)的JSONP公共API(MySql)
PHP 带有jQuery getJSON(回调)的JSONP公共API(MySql)