我正在使用带有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();
}
答案 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;
}