1

変数に値を設定する際に問題があります。私のコードは以下の通りです。

function fpform(){
var response_new = '';
var password_reset = "";
var fpemail = $('#frgtpwd').val();
//var fpemail = document.getElementById('frgtpwd').value;

if (fpemail == ""){
    $('span#fperror').text("insert your emal address");
    //document.getElementById('fperror').innerHTML = "Insert your email address";
    password_reset = 'no';
} else { 
    var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    if (filter.test(fpemail)==false) { 
        $('span#fperror').text("Email address is not in valid format");
        //document.getElementById('fperror').innerHTML = "Email address is not in valid format";
         password_reset = 'no';
    } else {
        $("#loader").html('<img src="images/ajax-loader.gif" />');
        $.post("forgot_password_process.php", {
            email:fpemail
        }, function(response){
            response_new = response.trim();
        }).success(function () {
            if (response_new == 'yes'){ 
                $("#fperror").html('<font color="green"><b>Your password has been reset now and emailed to you </b></font>');
                $("#loader").empty();
                password_reset = 'yes';
            } else {
                $("#loader").empty();
                $("#fperror").html('<font color="black"><b> Email address was not found in database!</b></font>');
                password_reset = 'no'; 
            } 
        }); 
    }
}

if (password_reset == "yes"){
    alert(password_reset);
    return true;
} else {
    alert(password_reset);
    return true;
}
}

最後の if 条件は、password_reset 変数が yes に設定されているかどうかをチェックし、それに応じて true または false を返します。ただし、アラートには password_reset 変数の空白の値が表示されます。最後の if に到達する前に password_reset 変数を割り当てる必要があるため、この背後にある問題を見つけることができないようです。誰でも解決策を提案できますか。

敬具

4

2 に答える 2

4

$.post()非同期であるため、データをアラートした時点でリクエストは完了していません。これを機能させるには、success-callback 内でもアラートを呼び出して、アラートを出す前にデータがあることを確認する必要があります。別のオプションは、同期 AJAX 呼び出しを使用することです (ただし、これはめったに良いオプションではありません)。

アップデート

関数が true/false を返す理由はわかりませんが、それが機能するには、同期 AJAX 呼び出しを行う必要があります。そうしないと、AJAX 呼び出しが完了するずっと前に外側の関数が返され、その時点ではわかりませんなんの反応だ。

外部関数の応答に依存するコードを、代わりに success-callback によって呼び出せるように、コードを再構築するようにしてください。

于 2012-09-02T20:39:30.627 に答える
-1

クリストファーと同じものを投稿するつもりだった。固定コードのサンプルを次に示します。最後のコードブロックも削除してください。

.success(function () {
        if (response_new == 'yes'){ 
            $("#fperror").html('<font color="green"><b>Your password has been reset now and emailed to you </b></font>');
            $("#loader").empty();
            password_reset = 'yes';
            alert 'yes';
            return true;
        } else {
            $("#loader").empty();
            $("#fperror").html('<font color="black"><b> Email address was not found in database!</b></font>');
            password_reset = 'no';
            alert 'no';
            return false;
        }
于 2012-09-02T20:44:22.997 に答える