Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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 jqueryajax";“递归太多”;_Javascript_Jquery_Ajax_Loops_Recursion - Fatal编程技术网

Javascript jqueryajax";“递归太多”;

Javascript jqueryajax";“递归太多”;,javascript,jquery,ajax,loops,recursion,Javascript,Jquery,Ajax,Loops,Recursion,我有一个连续运行5个步骤的过程,在我的页面中,我为每个步骤调用了一个ajax方法 想法是运行第一个,如果一切正常,则运行第二个,依此类推 我的代码是: $("#foo").click(function(){ $.ajax({ url: 'ajax.php', async: false, data: { step: 1 }, dataType: 'json', type:

我有一个连续运行5个步骤的过程,在我的页面中,我为每个步骤调用了一个ajax方法

想法是运行第一个,如果一切正常,则运行第二个,依此类推

我的代码是:

$("#foo").click(function(){
    $.ajax({
        url: 'ajax.php',
        async: false,
        data: {
            step: 1
        },
        dataType: 'json',
        type: 'GET',
        success: walk_through(data)
    });
});

function walk_through(data)
{
    if(data.status == 'ok')
    {
        if(data.next_step == 'end')
        {
            // All steps completed
        }
        else
        {
            // Current step completed, run next one
            $.ajax({
                url: 'ajax.php',
                async: false,
                data: {
                    step: data.next_step
                },
                dataType: 'json',
                type: 'GET',
                success: walk_through(data)
            });
        }
    }
    else
    {
        alert("Error.");
        console.log(data);
    }
}

我得到了“太多递归”错误,即使我的ajax调用被设置为同步。。为什么?

您的JavaScript在AJAX调用中出错:

$.ajax({
    url: 'ajax.php',
    async: false,
    data: {
      step: data.next_step
    },
    dataType: 'json',
    type: 'GET',
    success: walk_through //You had walk_through(data), which makes a function call, rather than a reference to a function.
});

您的遍历函数每次成功时都在调用自身。

更改

成功:遍历(数据)

success:遍历


您希望函数
walk\u through
成为成功处理程序,但不希望立即调用该函数。

尽管出现错误,代码是否仍能正常工作,还是失败了?您真的希望请求是同步的吗?如果它们是异步的,那么它就不会是递归的。显然,你永远不会得到下一步=='end'检查结果是什么response@Pointy:不,我不需要同步请求,但我认为问题在于,即使请求不同步,它也会自动调用。+1好点。这才是真正的问题。它将调用该方法来获取要放入success属性的值,因此它永远不会执行任何ajax调用。通过传递
遍历(数据)
您正在执行函数并将结果作为onSuccess方法传递。您需要传递方法本身。这就是问题所在!谢谢