1

我定义了一个函数,$(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我认为这不会导致问题。

4

1 回答 1

1

如果我理解正确,您在$(document).ready()块内有第一个 AJAX 调用。
所以这可能是因为你的块中有arrangeResults函数$(document).ready()。因此,您无法从 JScript 的其他部分调用该函数。像这样定义它:

    function arrangeResults(jsonObject, templateFunc) {
        ...
    }
    $(document).ready(function() {
        ...
    );

等等。如果我错了,请纠正我。

于 2013-06-27T12:08:45.393 回答