我有一个注册表单,用JS和PHP验证用户的电子邮件,然后检查数据库以查看电子邮件是否存在。一切都发生在带有JSON的单个页面上。
我需要RETURN TRUE
的成功结果,并带我到注册序列的下一页。我在window.location
下尝试case: success
,它会将我带到正确的页面,但它不会覆盖我表单中的隐藏字段。
有人可以告诉我应该如何执行这项工作吗?
$(document).ready(function(){
$('#newsletter-signup').submit(function(){
//check the form is not currently submitting
if($(this).data('formstatus') !== 'submitting'){
//setup variables
var form = $(this),
formData = form.serialize(),
formUrl = form.attr('action'),
formMethod = form.attr('method'),
responseMsg = $('#signup-response');
//add status data to form
form.data('formstatus','submitting');
//show response message - waiting
responseMsg.hide()
.addClass('response-waiting')
.text('Please Wait...')
.fadeIn(200);
//send data to server for validation
$.ajax({
url: formUrl,
type: formMethod,
data: formData,
success:function(data){
//setup variables
var responseData = jQuery.parseJSON(data),
klass = '';
//response conditional
switch(responseData.status){
case 'error':
klass = 'response-error';
break;
case 'success':
klass = 'response-success';
//return true; I tried this but it fails.
break;
}
//show reponse message
responseMsg.fadeOut(200,function(){
$(this).removeClass('response-waiting')
.addClass(klass)
.text(responseData.message)
.fadeIn(200,function(){
//set timeout to hide response message
setTimeout(function(){
responseMsg.fadeOut(200,function(){
$(this).removeClass(klass);
form.data('formstatus','idle');
});
},3000)
});
});
}
});
}
//prevent form from submitting
return false;
});
});
答案 0 :(得分:0)
你能否在成功时删除提交处理程序并让表单提交为“real”?
替换
//return true; I tried this but it fails.
使用
$('#newsletter-signup').unbind('submit').submit();
旁注:从成功回调中返回任何内容都不会使表单“执行”其他任何操作。当ajax函数完成时,return false;
语句已经执行。你需要重新提交表单,这次没有ajax。
答案 1 :(得分:0)
将异步选项置为false并将结果var设置为ajax函数:
var result = false;
$.ajax(
{
...
async: false,
...
success: function(response)
{
...
...
result = true;
}
});
return result;