我曾经是一个工作表单验证,包括远程检查用户名是否可用。我们已经在script.js文件中添加了很多其他的javascript,并且在最近的某个时候,这个文件的远程部分已经打破。只有一个表单字段被validate检查,即new_name字段。它是必需的(工作),并且必须可用(不工作)。Jquery Validate Remote失败。无法提交表单
这里是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响应是true还是false,不会显示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调用来调试问题? – yoda
我用Firebug观看过,并且ajax调用返回200 OK以及true或false。该功能工作正常 - 表单不会正确提交或响应不可用的用户名。 –