我有一个注册表,它用JS和PHP验证用户的电子邮件,然后检查数据库以查看电子邮件是否存在。使用JSON,所有事情都发生在一个页面上。
我需要RETURN TRUE
的成功结果,并将我带到注册序列的下一页。我在case: success
下尝试了window.location
,它将我带到正确的页面,但它不会带过我表单中的隐藏字段。
有人能给我一个应该如何执行的想法吗?
$(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;
});
});
您是否可以在成功时删除提交处理程序,并让表单提交为"真实"?
更换
//return true; I tried this but it fails.
带
$('#newsletter-signup').unbind('submit').submit();
旁注:从成功回调返回whatever不会使表单"做"任何其他事情。ajax函数完成后,return false;
语句已经执行完毕。您需要再次重新提交表单,这次没有ajax。
将asyncronous选项设置为false,并设置ajax函数的结果var:
var result = false;
$.ajax(
{
...
async: false,
...
success: function(response)
{
...
...
result = true;
}
});
return result;