如何在codeigniter HMVC中进行ajax调用

时间:2017-01-28 06:50:47

标签: php jquery ajax codeigniter

我正在使用带有HMVC Moduler Extension的Codeigniter 3.0.6版。 (MX)。当我尝试进行ajax调用时,它会向我显示错误按摩403。

<script>
var site = '<?=site_url()?>';
$('#item-name').keyup(function(){
     var d = $('#item-name').val();
     $('#item-list').css('display','block');
     $.post(site+"/moduleone/lists",{name: d}, function(data, status){
         $('#item-list').html(data);
     });
});
</script>

执行此代码后,我在Chrome控制台中获取并出错:

Failed to load resource: the server responded with a status of 403 (Forbidden)

模块方法:

public function lists()
{
    echo 'afadfad';
    exit();
}

2 个答案:

答案 0 :(得分:1)

我发现了问题。我使codeigniter csrf为true。这就是为什么每次我提交表单都需要一个csrf令牌。但是在ajax调用中没有找到csrf令牌,说明为什么它会显示身份验证错误。

$config['csrf_protection'] = TRUE;
$config['csrf_token_name'] = 'csrf';
$config['csrf_cookie_name'] = 'csrf_cookie';
$config['csrf_expire'] = 7200;
$config['csrf_regenerate'] = TRUE;
$config['csrf_exclude_uris'] = array(
    'moduleone/lists'
);

如果你关闭(假csrf_protection),它就会完美。

如果您想了解更多信息,请查看codeigniter user_guide。

答案 1 :(得分:0)

要使用base_url()site_url(),您必须加载codeigniter url helper。就像这样。

$this->load->helper('url');

或者您可以在application/config/autoload.php上加载它。然后像这样拨打ajax电话......

<script type="text/javascript">
    $(document).ready(function(){
    url = '<? echo base_url('moduleone/lists');?>';

    $('#item-name').on('keyup',function(){
         var d = $('#item-name').val();
         $('#item-list').css('display','block');

         $.ajax({
            type:'POST',
            url:url,
            data: {name: d}, 
            success:function(data, status){
             $('#item-list').html(data);
            }
         });
    });
    });
</script>

在Controller中使用$this->input->post('name')来获取从ajax调用发送的名称。像这样。

public function lists()
{
    $name = $this->input->post('name');// name sent from ajax
    echo $name;

}