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 に従い、ページロード時とフィルターの 1 つが使用されている場合の両方で呼び出すことができる外部関数を持つことを望んでいました。クリックしました。

AJAX呼び出しが非同期であるためだと思いますが、関数呼び出しが内部successにあるため、これは問題にはならないと思いました。

4

1 に答える 1

1

私の理解が正しければ、最初の AJAX 呼び出しが$(document).ready()ブロック内にあります。ブロック内にArrangeResults関数
があることが原因である可能性があります。そのため、JScript の他の部分から関数を呼び出すことができません。次のように定義します。$(document).ready()

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

等々。間違っていたら訂正してください。

于 2013-06-27T12:08:45.393 に答える