根据ajax回调的返回数据停止表单加载

时间:2010-11-18 19:06:39

标签: php javascript jquery ajax

你好我正在使用一个ajax post函数,我在那里发送数据,我的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 个答案:

答案 0 :(得分:1)

AJAX调用是异步的。您返回的“false”是成功回调,而不是您在那里显示的处理程序。因此,在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();
}

答案 1 :(得分:0)

继续下一步的过程超出了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;
                }
            });
        }
    }