Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jquery从each循环延迟请求ajax_Javascript_Jquery_Ajax_Jquery Deferred_Deferred - Fatal编程技术网

Javascript Jquery从each循环延迟请求ajax

Javascript Jquery从each循环延迟请求ajax,javascript,jquery,ajax,jquery-deferred,deferred,Javascript,Jquery,Ajax,Jquery Deferred,Deferred,三天来,我一直在试图找到一种在代码中使用JQuery延迟方法的方法,但不幸的是,我从未找到解决方案 我有两个函数。 第一个init_items发送第一个ajax请求以获取项目列表,然后,循环使用这些项目名称发送其他请求以获取项目的更多详细信息。 因此,在这个函数中,我希望当第一个请求完成时,启动以下请求 在调用click的第二个函数中,我希望系统在获取数据之前等待第一个功能完全完成(所有请求都完成) function init_items(id) { $.when(

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

我有两个函数。 第一个
init_items
发送第一个ajax请求以获取项目列表,然后,循环使用这些项目名称发送其他请求以获取项目的更多详细信息。 因此,在这个函数中,我希望当第一个请求完成时,启动以下请求

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

    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
启动,但它不会等待结果显示信息

我读过很多关于延迟、承诺、时间的案例,但我没有解决这个问题

有人有主意吗?我非常感谢你的帮助

最好的

山姆

谢谢大家。 我已经找到了解决办法。我将函数分为两个函数。 当第一个完成请求后,它会调用第二个,第二个启动承诺中声明的请求。

谢谢大家。 我已经找到了解决办法。我将函数分为两个函数。
当第一个完成请求后,它调用第二个,第二个启动承诺中声明的请求。

a)您必须使用
然后
而不是
完成
进行链接。尽可能避免
done
。b) 大括号与缩进不匹配。看起来您试图做正确的事情,但是您编写的代码没有做到这一点。内部
done
的回调如何/在何处结束是毫无意义的。
domain
似乎是一个常量,
getCurrentItem(code)
在nomansland中有点浮动。a)你必须使用
然后
而不是
done
进行链接。尽可能避免
done
。b) 大括号与缩进不匹配。看起来您试图做正确的事情,但是您编写的代码没有做到这一点。内部
done
的回调如何/在何处结束毫无意义。
domain
似乎是一个常量,
getCurrentItem(code)
在nomansland中有点浮动。