這部分是從這個線程的延續:jquery - return value from callback function (in post request) into the function its inside of? 因爲我更新了代碼,但麻煩依然存在。我使用jQuery驗證了一個簡單的html表單,儘管我的其他if/else語句正常工作,但ajax調用永遠都不會發生。這裏是javascript代碼:jquery表單驗證器從不讓阿賈克斯調用
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
}
和這裏的validate.php的相關部分:
$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_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
}
}
編輯終極版:好吧,我在我的回調函數固定錯誤,因爲在第一個答案看到,現在,有點不同的問題又出現了。我調試了函數valid_pass_combo_callback
,它從validate.php獲得正確的值;在這種情況下,invalid_old
是正在返回的值。當我調試時,data
等於invalid_old
。然而,比較失敗...所以代碼總是跳轉到最後一個else語句,無論如何。什麼也沒有發生,因爲那裏沒有任何行爲,那麼爲什麼比較總是失敗?
編輯,求助:我決定放棄綁定這個函數來提交,而是綁定到窗體上的一個按鈕onclick事件(我用它代替提交按鈕)並解決了這個問題。單擊按鈕時會調用驗證,並且如果客戶端驗證通過,則將表單提交給服務器進行驗證。
修復了最初的問題;但是,我在我的問題中添加了更多細節,因爲現在我遇到了另一個問題,即比較* always *失敗,即使'data'存儲validate.php中的正確值。 –
您應該爲新問題提出一個新問題。 – FishBasketGordo
完成:http://stackoverflow.com/questions/7043708/data-returned-from-ajax-always-failing-in-comparison再次感謝您的幫助。 –