你好我正在使用一个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行增加步骤时,设置操作并提交,它将保留在页面上并抛出警报。
有人知道我应该做什么来阻止我的提交过程吗?
答案 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;
}
});
}
}