从ajax()成功函数调用外部函数

时间:2013-06-27 11:59:27

标签: javascript jquery ajax json

我在$(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内,我认为这不会导致问题。

1 个答案:

答案 0 :(得分:1)

如果我理解正确的话,你会在$(document).ready()块内首次进行AJAX调用 因此,可能是因为您在$(document).ready()块中有 arrangeResults 功能。因此,您无法从JScript的其他部分调用该函数。 像这样定义:

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

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