【问题标题】:No value returned from function when triggered from within a callback [duplicate]从回调中触发时没有从函数返回值[重复]
【发布时间】:2012-11-11 21:07:36
【问题描述】:

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

【问题讨论】:

    标签: javascript jquery json loops


    【解决方案1】:

    发生这种情况是因为您在成功回调中拥有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);
        });
    });
    

    【讨论】:

    • 谢谢,您的解决方案对我来说很好用!还有一个问题;我应该怎么做才能将额外的参数传递给函数?
    • 没关系,明白了。 (fetchdata('参数', function(html){ ...)
    猜你喜欢
    • 2021-07-02
    • 1970-01-01
    • 2016-10-30
    • 2015-03-15
    • 2014-06-13
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    相关资源
    最近更新 更多