【问题标题】:AJAX request with CodeIgniter keep giving forbidden error使用 CodeIgniter 的 AJAX 请求不断给出禁止错误
【发布时间】:2017-05-06 07:08:02
【问题描述】:

我正在尝试检查 CodeIgniter 中是否存在用户电子邮件。

这是我正在使用的 CodeIgniter 的控制器:

public function check_email() {

    $email= $this->input->post('email');

    echo "error";
    if($email)
    {    
        $this->load->model('auth/register_model'); 
        $return_array = $this->register_model->check_member($this->input->post('email'));
        if($return_array == true)
        {
            $json['success'] = 'false' ;
            $json['exit'] = 'true';
            die(json_encode($json,JSON_PRETTY_PRINT));
        }    
        else
        { 
            $json['success'] = 'true' ;
            $json['exit'] = 'false';
            die(json_encode($json,JSON_PRETTY_PRINT));
        }

    } 

}

这是我正在使用的 CodeIgniter 的模型:

public function check_member($email) {

    $this->db->select('user_id')->from(DB_PREFIX .'publisher')->where('email', $email);
    $q = $this->db->get();
    if ($q->num_rows() == 1) {
        return true;
    }

    return false;

}

这是我正在使用的 CodeIgniter 的 AJAX:

function checkAvailability() {
    if($("#email").val()) {
        $(".showLiveEmail").addClass("fa fa-refresh fa-spin");
        $(".showEmail").removeClass("has-success");
        jQuery.ajax({
            url: "auth/register/check_email",
            data:'email='+$("#email").val(),
            type: "POST",
            success:function(data){
                if(data.success=="true")
                {
                    $(".showLiveEmail").removeClass("fa fa-refresh fa-spin");
                    $(".showEmail").removeClass("has-error")
                    $(".showLiveEmail").removeClass("fa fa-times");
                    $(".showLiveEmail").addClass("fa fa-check");
                    $(".showEmail").addClass("has-success");
                }
                else
                {
                }
            },
            error:function (){}
        });
    }
    else
    {
        $(".showLiveEmail").addClass("fa fa-times");
        $(".showEmail").removeClass("has-success")
        $(".showEmail").addClass("has-error")
    }
}

谁能帮帮我?我刚开始使用 CodeIgniter,我现在正面临这个问题。

【问题讨论】:

  • 如果您通过 ajax 进行发布,则需要传递一个 csrf 令牌,或者如果您不想要,则将其更改为 get 方法
  • 嘿,你能告诉我如何通过 csrf 吗?

标签: php jquery ajax codeigniter


【解决方案1】:

像下面这样修改控制器

public function check_email() {

    $email= $this->input->post('email');

    //echo "error"; // this is not needed here
    if($email)
    {    
        $this->load->model('auth/register_model'); 
        $return_array = $this->register_model->check_member($this->input->post('email'));
        if($return_array == true)
        {
            $json['success'] = 'false' ;
            $json['exit'] = 'true';
        }    
        else
        { 
            $json['success'] = 'true' ;
            $json['exit'] = 'false';
        }
         echo json_encode($json);
    }
    else{
       echo "error";
        } 

}

【讨论】:

    【解决方案2】:

    错误出现在您的 ajax 请求调用中。下面我附上了相同的正确代码。 Ajax URL 和传递数据这是你现在需要关心的两件事,否则很好:

    function checkAvailability() {
    if($("#email").val()) {
        $(".showLiveEmail").addClass("fa fa-refresh fa-spin");
        $(".showEmail").removeClass("has-success");
        var getEmail = $("#email").val();
        jQuery.ajax({
            url: "<?php echo base_url('auth/register/check_email'); ?>",
            data:{'email':getEmail},
            type: "POST",
            success:function(data){
                if(data.success=="true")
                {
                    $(".showLiveEmail").removeClass("fa fa-refresh fa-spin");
                    $(".showEmail").removeClass("has-error");
                    $(".showLiveEmail").removeClass("fa fa-times");
                    $(".showLiveEmail").addClass("fa fa-check");
                    $(".showEmail").addClass("has-success");
                }
                else
                {
                }
            },
            error:function (){}
        });
    }
    else
    {
        $(".showLiveEmail").addClass("fa fa-times");
        $(".showEmail").removeClass("has-success");
        $(".showEmail").addClass("has-error");
    }
    }
    

    这应该可行。如果您遇到任何错误,请告诉我

    【讨论】:

      【解决方案3】:

      我认为您在 ajax 调用中缺少 dataType:'json'。
      试试这个

      var email = $("#email").val();
          $.ajax({
              url: "<?php echo base_url(); ?>auth/register/check_email",
              data:'email='+email,
              type: 'POST',
              dataType : 'json',
              success:function(data)
              {
                  if(data.success=="true")
                  {
                      $(".showLiveEmail").removeClass("fa fa-refresh fa-spin");
                      $(".showEmail").removeClass("has-error")
                      $(".showLiveEmail").removeClass("fa fa-times");
                      $(".showLiveEmail").addClass("fa fa-check");
                      $(".showEmail").addClass("has-success");
                  }
                  else
                  {
                  }
              }
          });
      

      希望它会起作用:)

      【讨论】:

        猜你喜欢
        • 2016-08-29
        • 2016-01-08
        • 1970-01-01
        • 2018-02-21
        • 2018-08-12
        • 2023-03-05
        • 2017-03-23
        • 2023-03-10
        • 2019-08-10
        相关资源
        最近更新 更多