ここで多数の例を見て、それらを機能させるために何時間も試みましたが、何が間違っているのかわかりません。私は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()
false値を返す場合に、例外なしで常に値を取得する理由について混乱しています。ただし、$.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;
}
繰り返しになりますが、私はこれらすべてに慣れていないので、よろしくお願いします!:)