【问题标题】:Set Delay on this AJAX Call Loop在此 AJAX 调用循环上设置延迟
【发布时间】:2020-07-08 20:45:27
【问题描述】:

我在我的 AJAX 调用中收到一个错误,并且似乎我需要在每次循环我的第二个 ajax 调用时设置延迟。但我不能让它工作。

这是我的第一个 ajax 调用,在这个 ajax 调用内部有一个 jquery,每个循环调用第二个 ajax 调用。我添加了 setTimeout 函数,但我仍然在控制台上收到错误消息“未捕获 RangeError:超出最大调用堆栈大小”

$.ajax({
            url: mysite.ajax_url,
            type: 'POST',
            data: {
                'action': 'test_ajax_function',
                'user_input': user_input_last
            },
            success:function(data) {
                $(".container").css("opacity", 1);
                $("#loading-img").css({"display": "none"});

                var array_data = data.split("||");

                var items_count = array_data[0];
                var items = array_data[1];



                jQuery.each(JSON.parse(items), function() {

                setTimeout(function(){    
                getItemDetails(this);
                }, 3000);

                });



            },
            error: function(errorThrown){
                console.log(errorThrown);
            }
        }); 

这是第二次 ajax 调用。

function getItemDetails(id) {

    var item_id = id;

        $.ajax({
            url: mysite.ajax_url,
            type: 'POST',
            data: {
                'action': 'getItem',
                'id': item_id
            },
            success:function(data) {

            console.log(data);

            },
            error: function(errorThrown){
                console.log(errorThrown);
            }
        });    

}    


});

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    在您的第一个 ajax 调用中,不要将 this 作为 getItemDetails 的参数传递,这就是导致您的错误的原因。

    因为似乎getItemDetails 期望参数是项目的 ID,所以这样做:

    jQuery.each(JSON.parse(items), function(index, item) {
        getItemDetails(item.id);  //<------ I'm assuming 'id' is the name of the property
    });
    

    【讨论】:

    • 您好,感谢您发布答案,代码实际上是有效的,我从 ajax 调用中获得了一些我需要的详细信息,但对某些人来说,我收到错误 508,有人说这是因为我的 ajax 调用在环形。由于托管的一些限制,我需要增加延迟。我该怎么做,在每个循环上添加延迟。
    • 嗯,你的第二个 ajax 调用确实在一个循环内,但不是一个无限循环,这是 508 抱怨的。 jQuery.each(JSON.parse(items)) 不是无限的,因为items 中没有无限项,是吗?如果您愿意,可以尝试使用 setTimeout 来延迟呼叫,就像您在代码示例中所做的那样。如果这不起作用,我需要更多信息来提供帮助,例如发生错误时items 的长度以及您可能认为在问题中包含的任何其他重要信息
    猜你喜欢
    • 1970-01-01
    • 2016-01-28
    • 2013-04-27
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    相关资源
    最近更新 更多