【问题标题】:Check email availability in Cakephp using Ajax使用 Ajax 检查 Cakephp 中的电子邮件可用性
【发布时间】:2016-08-01 06:00:14
【问题描述】:

我正在尝试在 Cakephp 中通过 Ajax 检查电子邮件的可用性,但它不起作用。表单正常提交并在数据库中添加重复的电子邮件地址。以下是模板和控制器文件的代码。

View.ctp

<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')) ?>

UsersController.php

public function checkmail(){

if($this->request->is('ajax')){
    $user = $this->request->data['email'];
    $users = $this->Users->find('all')->where(['email'=> $user]);
    $tmp = $users->toArray();
    if(empty($tmp)){
        echo 'ok';
    }else{
        echo '!ok';
    }

}
exit;
}

【问题讨论】:

  • 问题到底出在哪里?控制器是否总是返回ok?我没有看到add 方法,您实际上使用save() 在数据库中存储新的电子邮件地址。在任何情况下,我都会将 toArray 更改为 If ($users-&gt;count() &gt; 0)
  • 问题是 $.ajax 没有调用 checkmail 函数。
  • 看看这个网址:“/login/users/checkmail”,
  • 浏览器调试器为 http 状态码提供什么?您的控制器称为 UsersController,但您的 URL 是 /login/users/checkmail - 您是否定义了一些自定义路由?

标签: php ajax cakephp


【解决方案1】:

UsersController.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');
        }

【讨论】:

  • 在成功函数中,上面if块添加行console.log(result.status)并检查浏览器控制台@rupinderkaur
  • 它什么也不打印。
  • @rupinderkaur 删除此条件if($this-&gt;request-&gt;is('ajax')) 并尝试
猜你喜欢
  • 1970-01-01
  • 2020-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多