JQuery AJAX "слишком много рекурсии" - PullRequest
4 голосов
/ 13 июня 2011

У меня есть процедура, которая выполняется через 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 установлены как синхронные ... почему?

Ответы [ 3 ]

9 голосов
/ 13 июня 2011

Изменение

success: walk_through(data)

К

success: walk_through

Вы хотите, чтобы функция walk_through была обработчиком успеха, но вы не хотите вызывать функцию немедленно.

2 голосов
/ 13 июня 2011

Ваш 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.
});
0 голосов
/ 13 июня 2011

Ваша функция walk_through вызывает себя каждый раз, когда она успешна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...