我正在Codeigniter中使用jquery验证程序插件,我想检查电子邮件字段中是否已存在给定的电子邮件。我已经按照Jquery验证程序文档中提供的说明完成了所有必要的操作,但是在Codeigniter中无法正常工作。有人可以协助我解决这个问题吗?
<script>
$(document).ready(function () {
$("#signupFrm").validate({
rules: {
customer_contactNumber: {
required: true,
digits: true,
minlength: 10,
maxlength:14
},
customer_email: {
required: true,
email: true,
remote: {
url: "<?php echo base_url(); ?>index.php/account/register_email_exists",
type: "post",
}
},
},
messages: {
customer_contactNumber:{
required: "Please enter your Contact Number",
minlength: "Contact number should not be lesser than 10 digits",
maxlength: "Contact number should not be higher than 14 digits",
digits: "Please enter numbers Only"
},
customer_email:{
required: "Please enter your email",
email: "Please enter a valid email",
remote: "Email already exist"
},
}
});
});
</script>
注册表格
<div class="form-group has-feedback">
<input type="email" class="form-control" placeholder="Email" id="customer_email" name="customer_email">
<span class="glyphicon glyphicon-envelope form-control-feedback"></span>
</div>
控制器
function register_email_exists()
{
if (array_key_exists('customer_email',$_POST))
{
$email=$_POST["customer_email"];
$this->load->model("Email_auth");
$this->Email_auth->verifyEmailExist($email);
if ($this->Email_auth->verifyEmailExist($email) == TRUE)
{
echo json_encode("FALSE");
}
else
{
echo json_encode("TRUE");
}
}
}
Email_auth.php
<?php
class Email_auth extends CI_Model {
function verifyEmailExist($email)
{
$this->db->select('customer_id');
$this->db->where(array("customer_email" => $email));
$query=$this->db->get('tbl_customer');
if ($query->num_rows() > 0)
{
return TRUE;
}
else
{
return FALSE;
}
}
}
答案 0 :(得分:1)
此答案假设您的远程CodeIgniter PHP函数正在正确查询数据库。
除非您除了要发送该字段之外的其他信息,否则根本不需要data
参数。默认情况下,该字段的值已发送。
删除所有这些内容:
data:{
customer_email: function() {
return $("#customer_email").val();
}
}
您的布尔值必须用引号引起来。在"true"
和"false"
的情况下,无论有没有json_encode()
,它都可以工作。但是,如果要发送消息字符串而不是"false"
,则必须使用json_encode()
。
echo json_encode("true");
或echo "true";
最后,如果您在CodeIgniter中启用了CSRF保护,则必须在data
参数中发送隐藏令牌的值。同样,您将不会发送customer_email
字段的值,因为默认情况下已经发送了该值。 (将csrftoken
下方的标记替换为您的令牌的实际name
。)
data: {
csrftoken: function() {
return $('input[name="csrftoken"]').val();
}
}