从回调中触发时,函数不返回任何值

时间:2012-11-11 21:07:36

标签: javascript jquery json loops

我正在研究为其他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:我为上面的演示稍微修改了我的代码,问题应该仍然存在。

1 个答案:

答案 0 :(得分: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);
    });
});