我在这里看到了很多例子,并尝试了几个小时让它们工作,但似乎无法弄清楚我做错了什么。我对 jquery 和 ajax 很陌生,所以请善待。
我正在尝试使用 smartWizard jquery 插件。这是一些代码
function validateStep1()
{
var isValid = true;
// validate first_name
var first_name = $('#first_name').val();
if(!first_name && first_name.length <= 0)
{
isValid = false;
$('#msg_first_name').html('<?php echo $LANG['field_this_required'] ?>').show();
}
else
{
$('#msg_first_name').html('').hide();
}
// validate last_name
var last_name = $('#last_name').val();
if(!last_name && last_name.length <= 0)
{
isValid = false;
$('#msg_last_name').html('<?php echo $LANG['field_this_required'] ?>').show();
}
else
{
$('#msg_last_name').html('').hide();
}
// validate address
var address = $('#address').val();
if(!address && address.length <= 0)
{
isValid = false;
$('#msg_address').html('<?php echo $LANG['field_this_required'] ?>').show();
}
else
{
$('#msg_address').html('').hide();
}
// validate city
var city = $('#city').val();
if(!city && city.length <= 0)
{
isValid = false;
$('#msg_city').html('<?php echo $LANG['field_this_required'] ?>').show();
}
else
{
$('#msg_city').html('').hide();
}
// validate county
/*
var county = $('#county').val();
if(!county && county.length <= 0)
{
isValid = false;
$('#msg_county').html('<?php echo $LANG['field_this_required'] ?>').show();
}
else
{
$('#msg_county').html('').hide();
}
*/
// validate state
var state = $('#state').val();
if(!state && state.length <= 0)
{
isValid = false;
$('#msg_state').html('<?php echo $LANG['field_this_required'] ?>').show();
}
else
{
$('#msg_state').html('').hide();
}
// validate postal
var postal = $('#postal').val();
if(!postal && postal.length <= 0)
{
isValid = false;
$('#msg_postal').html('<?php echo $LANG['field_this_required'] ?>').show();
}
else
{
$('#msg_postal').html('').hide();
}
// validate home_phone
var home_phone = $('#home_phone').val();
if(!home_phone && home_phone.length <= 0)
{
isValid = false;
$('#msg_home_phone').html('<?php echo $LANG['field_this_required'] ?>').show();
}
else
{
$('#msg_home_phone').html('').hide();
}
if(isValid==true)
{
document.getElementById('step_num').value=1;
loading('<?php echo $LANG['saving']; ?> ',1);
$.post('editprofile.php',$('#editProfile').serialize(),function(data)
{
unloading();
if(!data)
{
isValid = false;
$('#msg_step-1').html("<p style='font-weight:bold;color:#ff0000'><?php echo $LANG['database_update_error']; ?></p>").show();
}
else if(data.status !=1 )
{
isValid = false;
alert(data.message);
$('#msg_step-1').html("<p style='font-weight:bold;color:#ff0000'>"+data.message+"</p>").show();
}
else
{
$('#msg_step-1').html("<p style='font-weight:bold;color:#ff0000'>"+data.message+"</p>").show();
isValid = true;
}
},'json')
.done(function() { alert("done "+isValid); return isValid;})
.fail(function() { alert("fail "+isValid); return isValid;})
;
}
else
{
return isValid;
}
//Commented out the return so that it will only return when done above.
//return isValid;
}
还有其他代码检查此函数的返回值并采取相应措施。如果任何初始验证检查失败,则其他代码不会执行,因为变量isValid
设置为 false,这就是返回的内容。我的问题是发布到editprofile.php - 代码继续前进,就好像函数返回了一个真值,即使它还没有返回任何东西。它仍然继续执行$.post
部分中的代码,但只有在此函数之外的其他代码运行之后。
我知道代码是以异步方式运行的;但是,我很困惑为什么当任何检查返回错误值false
之类的东西时,它总是会毫无例外地获得该值;$('#address').val()
但是,它不是从$.post
代码中得到的。为什么要等待所有这些返回值而不是等待$.post
代码?
我也对调用代码在返回值之前如何操作感到困惑。
只是为了记录,这里是调用该函数的代码:
function leaveAStepCallback(obj){
var step_num= obj.attr('rel');
return validateSteps(step_num);
}
function validateSteps(step)
{
var isStepValid = true;
// validate step 1
if(step == 1){
if(validateStep1() == false ){
isStepValid = false;
$('#wizardvalidate').smartWizard('showMessage','Please correct the errors in step'+step+ ' and click next.');
$('#wizardvalidate').smartWizard('setError',{stepnum:step,iserror:true});
}else{
$('#wizardvalidate').smartWizard('setError',{stepnum:step,iserror:false});
}
}
// validate step 2
if(step == 2){
if(validateStep2() == false ){
isStepValid = false;
$('#wizardvalidate').smartWizard('showMessage','Please correct the errors in step'+step+ ' and click next.');
$('#wizardvalidate').smartWizard('setError',{stepnum:step,iserror:true});
}else{
$('#wizardvalidate').smartWizard('setError',{stepnum:step,iserror:false});
}
}
// validate step3
if(step == 3){
if(validateStep3() == false ){
isStepValid = false;
$('#wizardvalidate').smartWizard('showMessage','Please correct the errors in step'+step+ ' and click next.');
$('#wizardvalidate').smartWizard('setError',{stepnum:step,iserror:true});
}else{
$('#wizardvalidate').smartWizard('setError',{stepnum:step,iserror:false});
}
}
return isStepValid;
}
再一次,我对这一切都很陌生,所以请善待!:)