我定义了一个函数,$(document).ready()其中使用 DoT.js 将一些 JSON 排列成 HTML:
$(document).ready(function() {
    function arrangeResults(jsonObject, templateFunc) {
        $(jsonObject).each(function(i, item) {
            $.each(item, function(i2, item2) {
            $('#ajax-article-list .col-left').append( templateFunc(item2) );
            });
        });
    };
我在页面加载时有一个 AJAX 调用,它执行这个函数来显示数据:
$.post(ajaxRequestURL, function(data) {
    arrangeResults(ajaxData.pages, projectTemplate);
}
这很好用。
但是,我有一组链接,它们使用click()处理程序请求更多/不同的 JSON 数据,它应该arrangeResults使用返回的数据再次执行,但函数没有执行:
$('nav.filters a').click(function(ev) {
    ev.preventDefault();
    $.post(ajaxRequestURL, function(data) {
        ajaxData = parseJSON(data);
        arrangeResults(ajaxData.pages, projectTemplate);
    }
}
这行不通。数据都是有效的,如果我将内容arrangeResults直接放入脚本中,一切正常,但我希望遵循 DRY 并有一个外部函数,我可以在页面加载和其中一个过滤器时调用点击。
我猜这是因为 AJAX 调用是异步的,但由于函数调用在内部,success我认为这不会导致问题。