【问题标题】:deferred for chaining ajax wont work延迟链接ajax不会工作
【发布时间】:2013-08-26 07:59:35
【问题描述】:

我想使用 $.deferred 对象来处理递归函数的请求。

但是这里我有一个问题

  • $.when 不会等待等待 call1 成功,然后执行 call2!

  • 它不会将call1返回的数据发送到call2函数!

注意:只想用 async:true 实现我的 ajax;

提前致谢!

m.mov

    //*********************************************************************

    var i = 3; // just run the queue 3 times 

    function getNode(node_object_array)
    {
        $.when(call1(node_object_array)).then(call2);

        i--;
        if(i >= 0)
            getNode(next_level_childs);

    }

function call1(node_object_array)
    {
            var root_array = new Array();
        var d = new $.Deferred();

        $.each(node_object_array , function(index , each_root_node) {

            console.log("making request  for"+each_root_node.node_guid );
                 $.ajax({
                    url: url ,
                    dataType: 'json',
                    success: function(json) {
                        root_array.push(getNodeData(json));
                        console.log("success request for"+each_root_node.node_guid );
                    },
                });
        });

        d.resolve(root_array);
        return d;
    }



    //****** call2 which receive data from call1 and call some $.ajax's ****
    function call2(data)
    {
            var next_level_childs = new Array();
        var d = new $.Deferred();

        $.each(data , function(index , each_root_node) {
            $.each(each_root_node.childs , function(index , each_root_node_child) {
                console.log("making request for "+each_root_node_child );
                    $.ajax({
                        url: url ,
                        dataType: 'json',
                        async : false,
                        success: function(json) {
                            console.log("success request for"+each_root_node_child );
                            next_level_childs.push(getNodeData(json));
                        }
                    });
            });
        });
        d.resolve(next_level_childs);
        return d;
    }

【问题讨论】:

    标签: javascript jquery ajax .when


    【解决方案1】:

    如果您在 ajax 调用完成之前解决 Deferred,则 $.when 将认为它已完成并调用下一个函数 (call2)。您需要做的是在 call1 中的 ajax 调用成功/失败时解决它。

    编辑:您实际上需要结合您的 ajax 调用中的所有承诺,因此您只有在所有承诺都完成后才解决延迟。我只注意到 $.each 调用。

    【讨论】:

    • 感谢弗拉德!它的作品现在!我做了一些重构我的代码。目前,我会将所有 $.ajax 调用调用到一个对象并使用 **$.when.apply** 调用,其他的也可以正常工作!谢谢朋友!对不起,我没有任何名声!大声笑
    • 没关系。很高兴我能帮上忙。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多