使用Ajax检查Cakephp中的电子邮件可用性
我试图在Cakephp中通过Ajax检查电子邮件的可用性,但它不起作用。表单正常提交并在数据库中添加重复的电子邮件地址。以下是模板和控制器文件的代码 查看.ctp使用Ajax检查Cakephp中的电子邮件可用性,php,ajax,cakephp,Php,Ajax,Cakephp,我试图在Cakephp中通过Ajax检查电子邮件的可用性,但它不起作用。表单正常提交并在数据库中添加重复的电子邮件地址。以下是模板和控制器文件的代码 查看.ctp <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script> <script> $(document).ready(function(){ $("#email").cli
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("#email").click(function(){
$("#email").blur(function(){
var email = document.getElementById("email").value;
$.ajax({
type: "POST",
url: "/login/users/checkmail",
data: {email:email},
success: function(result){
if(result == 'ok'){
document.getElementById("myForm").submit();
}else{
alert('Email already exists');
}
}
});
return false;
});
});
});
</script>
<?= $this->Form->create('User',['enctype' => 'multipart/form-data'],array('id'=>'myForm')) ?>
<fieldset>
<?= $this->Form->input('username') ?>
<?= $this->Form->input('email',array('id'=>'email')) ?>
<?= $this->Form->input('password') ?>
<?= $this->Form->input('file',array( 'type' => 'file')) ?>
<?= $this->Form->button(__('Register')) ?>
userscocontroller.php
public function checkmail(){
if($this->request->is('ajax')){
$this->autoRender = false;
$user = $this->request->data['email'];
$users = $this->Users->find('all')->where(['email'=> $user]);
$tmp = $users->toArray();
if(empty($tmp)){
echo json_encode(["status"=>"ok"]);
}else{
echo json_encode(["status"=>"!ok"]);
}
}
exit;
}
更改您的aajx成功功能
success: function(data){
result = jQuery.parseJSON(data);
if(result.status == 'ok'){
document.getElementById("myForm").submit();
}else{
alert('Email already exists');
}
userscocontroller.php
public function checkmail(){
if($this->request->is('ajax')){
$this->autoRender = false;
$user = $this->request->data['email'];
$users = $this->Users->find('all')->where(['email'=> $user]);
$tmp = $users->toArray();
if(empty($tmp)){
echo json_encode(["status"=>"ok"]);
}else{
echo json_encode(["status"=>"!ok"]);
}
}
exit;
}
更改您的aajx成功功能
success: function(data){
result = jQuery.parseJSON(data);
if(result.status == 'ok'){
document.getElementById("myForm").submit();
}else{
alert('Email already exists');
}
问题到底出在哪里?控制器是否总是返回
ok
?我没有看到使用save()
在数据库中实际存储新电子邮件地址的add
方法。在任何情况下,如果($users->count()>0)问题是$,我都会将toArray更改为。ajax没有调用checkmail函数。看看这个url:“/login/users/checkmail”,浏览器调试器为http状态码提供了什么?您的控制器名为UsersController,但您的URL为/login/users/checkmail-您是否定义了一些自定义路由?问题到底出在哪里?控制器是否总是返回ok
?我没有看到使用save()
在数据库中实际存储新电子邮件地址的add
方法。在任何情况下,如果($users->count()>0)
问题是$,我都会将toArray更改为。ajax没有调用checkmail函数。看看这个url:“/login/users/checkmail”,浏览器调试器为http状态码提供了什么?您的控制器名为UsersController,但您的URL为/login/users/checkmail-您是否定义了一些自定义路由?在成功函数中,上面的if block add lineconsole.log(result.status)
和check console of browser@rupinderkaurit不会打印任何内容。@rupinderkaur如果($this->request->is('ajax'),则删除此条件)
和tryin success函数,上面的if block add lineconsole.log(result.status)
和check浏览器的console@rupinderkaurit不打印任何内容。@rupinderkaur如果($this->request->is('ajax'),请删除此条件)
,然后重试