これは部分的にこのスレッドの続きです:jquery - return value from callback function (in post request) into the function its inside of? 私はコードを更新したが、それでも問題は解決しないためです。私はjQueryを使ったシンプルなHTMLフォームを検証しています。他のすべてのif/elseステートメントが動作しているにもかかわらず、ajax呼び出しは決して行われません。ここにjavascriptコードがあります:jqueryフォームバリデーターは決してajaxコールを作成しません
var pass_form = $( '#pass_form'); pass_form.submit(valid_pass_sett);
$username = $_SESSION['username'];
$pass_old = $_POST['pass_old'];
$pass_new = $_POST['pass_new'];
if (empty($pass_old) || empty($pass_new)) {
echo "invalid";
} else if (!User::valid_user_pass($username, $pass_old)) {
echo "invalid_old";
} else if (!Sanitize::is_legal_password($pass_new)) {
echo "invalid_new";
} else {
echo "valid";
}
私はFirebugのでデバッグしていて、他のすべてのフォームの入力が正しいか、スクリプトは、その後、AJAX呼び出しを取得します:
function valid_pass_sett() {
//remove old errors - snipped
pass_old = $('input[name=pass_old]').val();
pass_new = $('input[name=pass_new]').val();
pass_confirm_new = $('input[name=pass_confirm_new]').val();
if (pass_old === "") {
//display error on form - snipped
return false;
} else if (pass_new === "") {
//display error on form - snipped
return false;
} else if (pass_new != pass_confirm_new) {
//display error on form - snipped
return false;
} else if (pass_new.length < 8) {
//display error on form - snipped
return false;
} else {
$.post("http://www.example.com/ajax/validate.php",{ // async validation
type: 'valid_old_change_pass',
pass_old: pass_old,
pass_new: pass_new
}, valid_pass_combo_callback);
alert('after the ajax call...');
}
return false; // cancel form submission
}
、ここではValidate.phpとの関連部分ですコールバック関数を呼び出すはずですが、フォームを送信します。これは、コールバック関数のコードです:
function valid_pass_combo_callback(data) {
if (data == 'valid') {
//only if the form is valid!
pass_form[0].submit();
}
else if (data == "invalid_old") {
//display error on form - snipped
}
else if (data == "invalid_new") {
//display error on form - snipped
}
else {
//it always jumps to here..., even though data *is* the correct value
}
}
EDITの再来:[OK]を最初の回答に見られるように、私は、私のコールバック関数でエラーを修正し、そして今、さまざまな問題のビットが浮上しています。私は関数valid_pass_combo_callback
をデバッグし、validate.phpから正しい値を得ています。この場合は、invalid_old
が返されます。私がデバッグするとき、data
はinvalid_old
に等しいです。しかし、比較は失敗します...コード常には、何があっても最後のelseステートメントにジャンプします。そこに何の行動もないので、何も起こらないので、比較はいつも失敗しているのですか?
EDIT、SOLVED:この関数をサブミットするのをやめ、フォームのボタン(サブミットボタンの代わりに使用しています)のonclickイベントにバインドして、問題を解決しました。ボタンがクリックされたときに検証が呼び出され、クライアント側の検証に合格すると、フォームは検証のためにサーバーに送信されます。
あなたのコードを見てみると$.post("http://www.example.com/ajax/validate.php",{ // async validation
type: 'valid_old_change_pass',
pass_old: pass_old,
pass_new: pass_new
}, valid_pass_combo_callback); // Remove (data) so the callback
// isn't invoked immediately.
初期の問題が修正されました。しかし、私の質問にはさらに詳しい情報を追加しました。なぜなら、 'data'がvalidate.phpから正しい値を格納していても、比較*常に*失敗するという別の問題が発生しているからです。 –
新しい問題について新しい質問をする必要があります。 – FishBasketGordo
done:http://stackoverflow.com/questions/7043708/data-returned-from-ajax-always-failing-in-comparisonもう一度ご協力いただきありがとうございます。 –