Javascript 使用codeigniter 403的Ajax请求(禁止)

Javascript 使用codeigniter 403的Ajax请求(禁止),javascript,php,jquery,ajax,codeigniter,Javascript,Php,Jquery,Ajax,Codeigniter,我正试图用Ajax向Codeigniter中的控制器文件发送一个值,但没有成功。我已经搜索了这个问题,现在我在这里多次提出这个问题,但仍然找不到结果。希望任何人都能帮助我。 谢谢 Js文件 function submitSend() { var message = $('#sms').val(); if(message == "") { $("#sms").attr("placeholder", "Type a message please...");

我正试图用Ajax向Codeigniter中的控制器文件发送一个值,但没有成功。我已经搜索了这个问题,现在我在这里多次提出这个问题,但仍然找不到结果。希望任何人都能帮助我。 谢谢

Js文件

function submitSend()
{
    var message = $('#sms').val();
    if(message == "")
    {
      $("#sms").attr("placeholder", "Type a message please...");
      return false;
    }

    $.ajax(
    {
      url: "<?php echo base_url();?>/mychat/send",
      type: 'POST',
      data:{
              '<?php echo $this->security->get_csrf_token_name(); ?>' : '<?php echo $this->security->get_csrf_hash(); ?>',
              'message': message
             },
      success: function (data)
      {
       window.console.log('Successful');
      },
      error :function(data)
      {
      window.console.log('Failed');
      }
    });
}

恐怕您不能在
JavaScript
文件中使用
PHP
标记,正如您提到的,您有一个
JS
文件

您必须在
.PHP
文件中运行
PHP
代码


也许您可以将
submitSend()
函数解耦一点,并通过提取
PHP
标记以及
$('#sms').val()
使其更加模块化。这些可以作为参数传递给函数,从中调用它
.php
文件)

我担心您不能在
JavaScript
文件中使用
php
标记,正如您提到的,您有一个
JS
文件

您必须在
.PHP
文件中运行
PHP
代码


也许您可以将
submitSend()
函数解耦一点,并通过提取
PHP
标记以及
$('#sms').val()
使其更加模块化。这些可以作为参数传递给函数,从中调用函数
.php
文件)

很可能是因为CSRF令牌,请尝试禁用CSRF并检查是否是由于CSRF,然后在CSRF配置中列出特定函数的白名单

很可能是因为CSRF令牌,请尝试禁用CSRF并检查是否是由于CSRF,然后在CSRF配置中列出特定函数的白名单

您不能在js中使用php标记文件

url: "<?php echo base_url();?>/mychat/send", //this line in js file is wrong
....
url: BASE_URL+"mychat/send",
....

您不能在js文件中使用php标记

url: "<?php echo base_url();?>/mychat/send", //this line in js file is wrong
....
url: BASE_URL+"mychat/send",
....

在包含JS文件之前,在页脚视图中添加此代码

<?php $CI =& get_instance(); ?>
<script> 
    var csrf_name = '<?php echo $CI->security->get_csrf_token_name(); ?>';
    var csrf_hash = '<?php echo $CI->security->get_csrf_hash(); ?>';
</script>

在包含JS文件之前,在页脚视图中添加此代码

<?php $CI =& get_instance(); ?>
<script> 
    var csrf_name = '<?php echo $CI->security->get_csrf_token_name(); ?>';
    var csrf_hash = '<?php echo $CI->security->get_csrf_hash(); ?>';
</script>
这是我的工作

/app/Config/Security.php

/**
     * --------------------------------------------------------------------------
     * CSRF Token Name
     * --------------------------------------------------------------------------
     *
     * Token name for Cross Site Request Forgery protection cookie.
     *
     * @var string
     */
    public $tokenName = 'csrf_token_name';
在我的表格中

<input type="hidden" name="<?= csrf_token() ?>" value="<?= csrf_hash() ?>" />
这是我的工作

/app/Config/Security.php

/**
     * --------------------------------------------------------------------------
     * CSRF Token Name
     * --------------------------------------------------------------------------
     *
     * Token name for Cross Site Request Forgery protection cookie.
     *
     * @var string
     */
    public $tokenName = 'csrf_token_name';
在我的表格中

<input type="hidden" name="<?= csrf_token() ?>" value="<?= csrf_hash() ?>" />


你得到的只是403?显示了什么错误消息?您可以通过此检查我的相关答案@Alex now没有显示错误,但当我尝试“控制器文件中的echo$message”时,没有显示任何内容。消息变量没有传递到控制器文件。@lothux1987我已看到您的答案,我的js代码现在正常,但是变量消息没有传递到控制器文件。我不知道为什么!检查devtools以查看发布的内容。而您得到的只是403?显示了什么错误消息?您可以通过此检查我的相关答案@Alex now没有显示错误,但当我尝试“控制器文件中的echo$message”时,没有显示任何内容。消息变量没有传递到控制器文件。@lothux1987我已看到您的答案,我的js代码现在正常,但是变量消息没有传递到控制器文件。我不知道为什么!检查devtools以查看发布的内容。我在视图文件中设置了js文件中的函数。现在没有显示任何错误,但在发送变量消息的控制器文件中没有发送任何内容。我不明白为什么?!变量消息正在成功地从html获取值,但不要将其传递到控制器文件,因为url错误,您不能在js文件中使用,消息发送到错误的控制器我在视图文件中设置了js文件中的函数。现在没有显示任何错误,但在我发送变量消息的控制器文件中没有发送任何内容。我不明白为什么?!变量消息正在成功地从html获取值,但不要将其传递到控制器文件,因为url错误,您无法在js文件中使用,消息将发送到错误的控制器,以供重播。我尝试了此方法,但不起作用。只有在视图文件中包含js函数时,错误才会被删除。但仍然无法正常工作。“message”变量未发送到控制器文件。将此变量也添加到页脚
var base_url=”“
然后在AJAX函数中将其调用为
url:base\u url+“/mychat/send”,
仍然存在相同的问题。检查配置文件
$config['csrf\u protection']=TRUE$config['csrf_regenate']=TRUE$config['global_xss_filtering']=TRUE确定在页脚中使用此选项
$CI=&get_instance();//创建codeigniter引用实例。
并使用
$CI->security->
代替
$this->security->
,感谢您的重播。我尝试了此方法,但不起作用。只有在视图文件中包含js函数时,错误才会被删除。但仍然无法正常工作。“message”变量未发送到控制器文件。将此变量也添加到页脚
var base_url=”“
然后在AJAX函数中将其调用为
url:base\u url+“/mychat/send”,
仍然存在相同的问题。检查配置文件
$config['csrf\u protection']=TRUE$config['csrf_regenate']=TRUE$config['global_xss_filtering']=TRUE确定在页脚中使用此选项
$CI=&get_instance();//创建codeigniter引用实例。
并使用
$CI->security->而不是
$this->security->