【问题标题】:jQuery ajax "too much recursion"jQuery ajax“递归过多”
【发布时间】:2011-09-13 21:38:57
【问题描述】:

我有一个运行 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 调用设置为同步。为什么?

【问题讨论】:

  • 尽管出现错误,代码是否仍然有效,还是失败了?您真的希望请求是同步的吗?如果它们是异步的,它根本就不会是递归的。
  • 你显然永远不会得到 next_step == 'end' 检查什么是响应
  • @Pointy:不,我不需要同步请求,但我认为问题在于

标签: javascript jquery ajax loops recursion


【解决方案1】:

改变

success: walk_through(data)

success: walk_through

您希望函数walk_through 成为成功处理程序,但您不想立即调用该函数。

【讨论】:

  • +1 好地方。这是实际的问题。它将调用该方法以获取放入成功属性的值,因此它根本不会进行任何 ajax 调用。
  • 这是肯定的。通过传递walk_through(data),您正在执行函数并将结果作为 onSuccess 方法传递。您需要传递方法本身。
  • 这就是问题所在!谢谢!
【解决方案2】:

您的 AJAX 调用中的 JavaScript 错误:

$.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.
});

【讨论】:

    【解决方案3】:

    您的 walk_through 函数每次成功时都会调用自己。

    【讨论】:

    • 实际上它会调用自己,即使它不是。
    猜你喜欢
    • 1970-01-01
    • 2016-03-02
    • 2015-08-07
    • 1970-01-01
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    相关资源
    最近更新 更多