从ajax返回的数据总是失败==比较?
该线程出现了一个新问题: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"
这是正确的(基于测试数据我进入)。因此,根据Firebug,data
正在存储"invalid_old"
;然而,代码总是跳转到最后一个else语句。为什么比较总是失败?
正如评论指出,加入JQuery的trim
功能解决了这一问题,如图所示:
function valid_pass_combo_callback(data) {
trimmed_data = $.trim(data);
if (trimmed_data == 'valid') {
//only if the form is valid!
pass_form[0].unbind('submit').submit();
}
else if (trimmed_data == "invalid_old") {
//display error on form - snipped
}
else if (trimmed_data == "invalid_new") {
//display error on form - snipped
}
else {
//it always jumps to here..., even though data *is* the correct value
}
}
很高兴知道你做了什么。 – nottinhill
@StephanKristyn我认为这是我使用的代码。我不再有权访问这个代码库(不同的工作场所),但我相信这是我使用的。 –
@StephanKristyn我的编辑添加了您需要的信息吗? –
尝试暂时放置支票上方的alert(data.toString());
以查看其返回的内容。如果它不是字符串本身,那么它不会返回您所期望的数据。
试着做一个破发点中的回调和设置表达式'数据==“invalid_old”'手表。它说什么?我怀疑这可能是一个不正确的案例,或者有时难以看到的事情。 – FishBasketGordo
也许你的服务器在'invalid_old'后返回一个换行符。下载Charles代理的试用版(如果您使用的是ajax,则为一个不可缺少的工具),并检查服务器返回的数据的十六进制视图。 –
我没有使用Charles代理,但我添加了一个'trim'函数给validate.php,并解决了这个问题。非常感谢您的帮助! –