【问题标题】:Jquery deferred requests ajax from an each loopJquery延迟请求来自每个循环的ajax
【发布时间】:2016-06-11 20:17:11
【问题描述】:

3 天以来,我一直在尝试找到一种在我的代码中使用 JQuery 延迟方法的方法,但不幸的是我从未找到解决方案。

我有 2 个函数。 第一个init_items 发送第一个ajax 请求以获取项目列表,然后,一个循环使用这些项目名称发送其他请求以获取有关项目的矿石详细信息。 所以在这个函数中,我想当第一个请求完成时,启动以下请求。

在第二个函数中,点击调用,我希望系统在获取数据之前等待第一个函数完全完成(所有请求都完成)。

    function init_items(id) {

        $.when(
            $.ajax({
                async: false,
                data: { type : type, name : domain },
                type: 'GET',
                url: 'select_items.php'
            }).done( function (data) {

           var promises=[];

            $.each( JSON.parse(data), function(k,v) {

                var code = v.code;

                getCurrentItem(code);

                var req = $.get("get_groups.php", { id: id }).done(function(data1) {

                res = JSON.parse(data1);
                global_news[domain] = res;

                promises.push( req );
            });

            return $.when.apply(null, promises).done(function(){
                console.log('done 1');
            });             
        });     
    }

    $("button[name='refresh_value']").on("click", function() {

        var id = $("select[name='id']").val();

        $.when(init_items(id)).done(function(n){
            console.log(n.num);
            console.log('all set');
        });
});

当前单击按钮,函数init_items 启动,但不等待结果显示信息。

我已经阅读了很多关于boud、deferred、promise、when的案例,但是我还没有解决这个问题。

有人有想法吗?非常感谢您的帮助。

最好的,

山姆

【问题讨论】:

  • a) 您必须使用 then 而不是 done 进行链接。尽可能避免done。 b)您的大括号与您的缩进不匹配。似乎您尝试做正确的事情,但您编写的代码并没有做到这一点。内部done 的回调如何/在哪里结束是没有意义的。
  • domain 似乎是一个常数,getCurrentItem(code) 有点浮动。

标签: javascript jquery ajax jquery-deferred deferred


【解决方案1】:

谢谢各位。 我已经找到了解决办法。我将功能分为两个功能。 当第一个完成它的请求时,它会调用第二个启动它在承诺中声明的请求。

【讨论】:

    猜你喜欢
    • 2016-09-11
    • 2010-12-20
    • 2016-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 2013-11-09
    相关资源
    最近更新 更多