このスレッドから新しい問題が発生しました:jquery form validator never makes ajax call、ajaxリクエストから返されたデータは正確ですが、比較では常に失敗します。これは、Ajaxリクエストを行うコードです:ajaxから返されたデータは常に==比較に失敗していますか?
var pass_form = $('#pass_form');
pass_form.submit(valid_pass_sett);
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
}
これは、要求がに提出されたコードです:
$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";
}
と、これはそれを処理するコールバック関数です。コールバック関数は、比較が常に失敗する関数です。
function valid_pass_combo_callback(data) {
//breakpoint is set here
if (data == 'valid') {
//only if the form is valid!
pass_form[0].unbind('submit').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
}
}
私はこのコードをデバッグ、およびValidate.phpとは、(私が入るだ試験データに基づいて)正確である"invalid_old"
を返しています。したがって、data
はFirebugによると"invalid_old"
を格納しています。ただし、コードは常にが最後のelseステートメントにジャンプします。比較が常に失敗するのはなぜですか?
コールバックでブレークポイントを作成し、表現 'データ==「invalid_old」'のための時計を設定してみてください。それは何と言いますか?私はそれが間違ったケースか、時には見るのが難しいようなものかもしれないと思う。 – FishBasketGordo
サーバが '' invalid_old ''の後に改行を返している可能性があります。チャールズ・プロキシの試用版(ajaxで作業しているならindespensibleツール)をダウンロードして、サーバーから返されたデータの16進表示を確認してください。 –
私はCharlesのプロキシを使用していませんでしたが、validate.phpに 'trim'関数を追加して、問題を修正しました。すべての助けをありがとう! –