0

私は、他の jQuery コールバックにデータを提供する関数に取り組んでいます。問題は、ジェットを動作させることができないことです。fetchdata() 関数の内容を .click コールバックに直接入れると機能しますが、将来複数の異なるコールバックで使用できるように別のジェネリック関数が必要です。ここで私が間違っていることを誰かが指摘できますか? fetchdata() 関数内のループが中断され、値が返されないようです。

    function fetchdata(){
        var html;
        $.ajax({
            url:'/test.php', 
            data:{ action: 'fetch-data' },
            dataType:'json',
            async: false,
            success: function(data){
                var entries = [];
                $.each(data, function(id, val){
                    entries.push(val.sample);
                });
                var html = entries.join('');
            }
        });
        return html;
    }
    $(document).on('click', 'a.btn.execute', function(e) {
        e.preventDefault();
        var html =  fetchdata();
        $('div#container').html(html);
    });

PS: 上記のデモ用にコードを少し変更しましたが、問題はまだ残っているはずです。

4

1 に答える 1

2

var html = entries.join('');これは、以前の html 変数と重複している成功コールバック内にあるために発生します。ただhtml = entries.join('');うまくいくでしょう。async: falseでも時代遅れなのであまり使わないでください

より良い解決策は次のとおりです。

function fetchdata(callback){
    $.ajax({
        url:'/test.php', 
        data:{ action: 'fetch-data' },
        dataType:'json',
        success: function(data){
            var entries = [];
            $.each(data, function(id, val){
                entries.push(val.sample);
            });
            var html = entries.join('');
            callback(html);
        }
    });
}
$(document).on('click', 'a.btn.execute', function(e) {
    e.preventDefault();
    fetchdata(function(html){
      $('div#container').html(html);
    });
});
于 2012-11-11T21:11:18.050 に答える