【发布时间】:2011-09-07 05:14:02
【问题描述】:
我有一个曾经有效的表单验证,包括远程检查可用的用户名。我们已经在 script.js 文件中添加了许多其他的 javascript,并且在最近的某个时候,它的远程部分坏了。 validate 只检查一个表单字段,即 new_name 字段。它是必需的(有效)并且必须可用(无效)。
这里是 jQuery:
$('#nickname_form').validate({
rules: {
new_name: {
required: true,
remote: {
url: '/api/screenname_unique/',
type: 'post'
}
}
},
messages: {
new_name: {
required: 'Please choose a Forum Username.',
remote: 'That Username is already taken or contains invalid characters.'
}
}
});
正如我所说,上面的内容过去可以正常工作,没有任何变化。我检查了 script.js 文件的其余部分,没有出现任何错误。此外,在该站点中,我们没有在任何地方看到 JS 错误。如果我删除上述代码的远程部分,则所需的检查将起作用,并且当字段中有值时表单将提交。
使用远程,表单将不会提交,无论远程调用的 ajax 响应是真还是假,都不会显示 jQuery validate 错误消息。这是远程调用的页面。就给定值给出的响应而言,它工作正常:
<?php
header('Content-type: application/json');
//get the post value
$screen_name = $_POST['new_name'];
//get their member_id
$member_id = $this->EE->session->userdata['member_id'];
//return false if no screen_name provided
if((!$screen_name) || (!$member_id)) {
echo json_encode(false);
exit;
} else { //there is a screen_name
//Regex Check for valid chars
$valid = !preg_match('/[^a-z0-9_ -]/i',trim($screen_name));
if (!$valid) {
echo json_encode(false);
exit;
}
//SQL
$results = $this->EE->db->query("SELECT member_id FROM exp_members WHERE screen_name = '$screen_name' and member_id <> '$member_id' limit 1");
if ($results->num_rows() > 0) {
echo json_encode(false);
} else {
echo json_encode(true);
}
}
?>
我不确定从这里去哪里。想法?
【问题讨论】:
-
您是否使用过
console.log或查看过ajax 调用来调试问题? -
我看过 Firebug 并且 ajax 调用返回 200 OK 以及相应的 true 或 false 。该功能工作正常 - 表单无法正确提交或响应不可用的用户名。