在 CodeIgniter 中使用 ajax 出现 403 禁止错误

Posted

技术标签:

【中文标题】在 CodeIgniter 中使用 ajax 出现 403 禁止错误【英文标题】:403 Forbidden error using ajax in CodeIgniter 【发布时间】:2018-11-28 18:04:37 【问题描述】:

我正在使用 ajax 在我的 textbox 自动完成中显示名字,但我的 ajax URL 不起作用。每次都显示在网络标签中

403 禁止。

我试过这样的 ajax URL

 url:baseUrl + "/index.php/Employee_control/search_with_emp_name",
 url:baseUrl +"/Employee_control/search_with_emp_name",

但仍然显示相同的错误。

我的 .ht 访问代码

RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA] 

我的基本网址$config['base_url'] = 'http://localhost/test/';

我的看法

<input type="text" class="form_control" name="employee_name" id="employee_name">

custome.js

var getUrl = window.location;
var baseUrl = getUrl.protocol + "//" + getUrl.host + "/" + getUrl.pathname.split('/')[1];


    $(document).ready(function() 
       $("#employee_name").keyup(function() 
           var emp_name = $('#employee_name').val();
              $.ajax(
                   type: "POST",
                   url:baseUrl + "/index.php/Employee_control/search_with_emp_name",
                   data: 
                      emp_name: emp_name
                   ,

                   success: function(html) 
                      alert(html);
                   
               );
            );
    );

控制器

public function search_with_emp_name()
        echo $emp_name = $this->input->post('emp_name');
       $get_result=$this->Employee_model->search_emp_name($emp_name);
       print_r($get_result);

型号

public function search_emp_name($emp_name)
          $this->db->like('firstname', $emp_name, 'both'); 
          $query = $this->db->get('tbl_employee');
          $result = $query->result();
        if($result)
            
              return $result;
            
            else 
            
              return 0;
             


【问题讨论】:

Ajax call on CodeIgniter controller results in 403 Forbidden的可能重复 另见:***.com/q/7348383/594235 【参考方案1】:

希望对您有所帮助:

首先确保您已在 config.php 中将 csrf 令牌设置为 false;

 $config['csrf_protection'] = FALSE;
 $config['csrf_token_name'] = 'csrf_test_name';
 $config['csrf_cookie_name'] = 'csrf_cookie_name';

或者,如果您不想将其设置为 false,只需在您的 ajax 调用中将数据传递给 csrf_token_nameget_csrf_hash 像这样:

 data: '<?php echo $this->security->get_csrf_token_name(); ?>':'<?php echo $this->security->get_csrf_hash(); ?>',

似乎问题出在您的基本网址上,所以将这行代码放在页面标题中并使用BASE_URLlike this

<script type="text/javascript">
     const BASE_URL = "<?php echo site_url();?>";
</script>
<script src="<?=site_url('your-js-path/js/custome.js');?>"></script>

你的 ajax 应该是这样的:

$(document).ready(function() 
       $("#employee_name").keyup(function() 
           var emp_name = $('#employee_name').val();
              $.ajax(
                   type: "POST",
                   url: BASE_URL+"Employee_control/search_with_emp_name",
                   data: emp_name: emp_name,

                   success: function(html) 
                      alert(html);
                   
               );
            );
    );

【讨论】:

我的 custome.js 文件在应用程序之外。 所以有什么问题只需提供我的答案中给出的路径 显示 404 not found 我只是想知道我在脚本中添加的 baseUrl 有什么问题? 所以给你的文件正确的路径,你有没有在你的 config.php 中启用 csrf 保护

以上是关于在 CodeIgniter 中使用 ajax 出现 403 禁止错误的主要内容,如果未能解决你的问题,请参考以下文章

CodeIgniter - AJAX 注册表单验证

尝试在codeigniter中使用ajax提交表单

如何在codeigniter中使用ajax上传图片?

Codeigniter- Ajax Codeigniter Ajax - 通过ajax返回不止一行

使用 jquery / ajax 在 CodeIgniter 的控制器中调用函数

在 CodeIgniter 中使用 AJAX 从数据库中获取单行?