Остановить загрузку формы на основе данных возврата из обратного вызова ajax - PullRequest
1 голос
/ 18 ноября 2010

Здравствуйте, я работаю с функцией поста ajax, куда я отправляю данные, и мой обратный вызов из PHP возвращает некоторые данные обратно.Основываясь на возвращенных данных, я принимаю решение: либо перейти вперед, либо разрешить пользователю оставаться на странице и вносить изменения.

        if (validateStep(step))
        {
        if(step==1)
        { 
            var data = document.getElementById('hiddenContact').value;
            $.post('/app/controller/action', {'data':data}, function(returndata){if(returndata.match('not Unique'))alert('Contact source already exists'); else if(returndata.match('not posted')){alert("Not posted to the database");return false;}});
        }
        step = step + 1;
        form[0].action = '/app/controller/index/step:'+step;
        document.getElementById('step').value = step;
        form[0].submit();
        }

Здесь я пытаюсь остановить работу приложения, когда возвращаются данныесоответствует «не опубликовано», и я выдаю предупреждение, а затем возвращаю false, чтобы остановить операцию.Я не могу остановить приложение от перехода на следующий шаг, хотя.Хотя возвращается false, операция переходит к следующему шагу, но когда я комментирую последние 4 строки, которые увеличивают шаг, устанавливают действие и отправляют, он остается на странице и выдается предупреждение.

Кто-нибудь знает, что я должен делать, чтобы остановить мой процесс от представления ??

Ответы [ 2 ]

1 голос
/ 18 ноября 2010

AJAX-вызовы являются асинхронными.Возвращаемое «ложь» относится к обратному вызову успеха, а не к обработчику, который вы там показали.Таким образом, последние четыре шага всегда выполняются до того, как вызов AJAX достигнет сервера.Вы можете исправить это, изменив ответный вызов ajax, чтобы справиться с этим, например так:

if (validateStep(step))
{
    var next_step = function() {
        step = step + 1;
        form[0].action = '/app/controller/index/step:'+step;
        document.getElementById('step').value = step;
        form[0].submit();
    }

    if(step==1)
    { 
        var data = document.getElementById('hiddenContact').value;
        $.post('/app/controller/action', { 'data':data }, function(returndata) {
            if (returndata.match('not Unique')) alert('Contact source already exists');
            else if (returndata.match('not posted')) alert("Not posted to the database");
            else next_step();
        });
    }
    else next_step();
}
0 голосов
/ 18 ноября 2010

ваш процесс перехода к следующему шагу находится за пределами вашего оператора IF и всегда будет выполняться.

вы не можете этого сделать:

    if (validateStep(step))
    {
        if(step==1)
        { 
            var data = document.getElementById('hiddenContact').value;
            $.post('/app/controller/action', {'data':data}, function(returndata){
                if(returndata.match('not Unique')) {
                    alert('Contact source already exists');

                    step = step + 1;
                    form[0].action = '/app/controller/index/step:'+step;
                    document.getElementById('step').value = step;
                    form[0].submit();

                } else if (returndata.match('not posted')){
                    alert("Not posted to the database");
                    return false;
                }
            });
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...