【发布时间】:2011-08-12 14:05:40
【问题描述】:
这部分是此线程的延续:jquery - return value from callback function (in post request) into the function its inside of? 因为我更新了代码,但问题仍然存在。我正在使用 jquery 验证一个简单的 html 表单,尽管我的所有其他 if/else 语句都有效,但 ajax 调用永远不会进行。这是javascript代码:
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
}
}
EDIT redux:好的,我修复了回调函数中的错误,如第一个答案所示,现在出现了一些不同的问题。我调试了函数valid_pass_combo_callback,它从 validate.php 中得到了正确的值;在这种情况下,invalid_old 是返回的值。当我调试时,data 等于invalid_old。然而,比较失败了......所以代码 always 无论如何都会跳转到最后一个 else 语句。什么都没有发生,因为那里没有任何行为,那么为什么比较总是失败?
编辑,已解决:我决定放弃绑定此函数以提交,而是绑定到表单上按钮的 onclick 事件(我正在使用它来代替提交按钮)并解决了问题。单击按钮时调用验证,如果客户端验证通过,则将表单提交到服务器进行验证。
【问题讨论】: