在codeigniter中拒绝Ajax jquery url访问

时间:2013-06-30 08:42:14

标签: jquery ajax codeigniter

$.ajax({
        type: 'POST',
        url: '/ci_practice/blog/reviews',
        data: 'res_id='+res_id,
        success: function(data){
            $('#screen-overlay').show(slow);
            $('#screen-overlay').html(data);
        },
        error: function (xhr, ajaxOptions, thrownError) {
        alert(xhr.status);
        console.log(xhr.responseText);
        alert(thrownError);
    }
});

这会引发500错误。访问功能reviews时出现问题,如控制台中的console.log(xhr.responseText);所示。

我应该如何在ajax中为url分配值,以便以codeigniter方式执行此操作。 我在另一个文件中有jQuery:ajax.js

非常感谢您的回复。谢谢。

2 个答案:

答案 0 :(得分:1)

您应该包含base_url,其中包含控制器名称/,然后包含您要访问的功能名称

$.ajax({
    type: 'POST',
    url: '<?php echo base_url(); ?>/controllername/function',
    data: 'res_id='+res_id,
    success: function(data){
        $('#screen-overlay').show(slow);
        $('#screen-overlay').html(data);
    },
    error: function (xhr, ajaxOptions, thrownError) {
    alert(xhr.status);
    console.log(xhr.responseText);
    alert(thrownError);
}

});

在你的情况下,我认为blog是控制器而reviews是一个函数,所以看起来应该是url: '<?php echo base_url(); ?>/blog/reviews',

Forbidden Error  403禁止错误可能是由于错误.htaccess重写,您应该删除index.php文件应包含的.htaccess网址

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

您的config.php应该包含此内容

$config['index_page'] = "";

$config['uri_protocol'] = 'AUTO';

答案 1 :(得分:1)

问题是我的配置文件中启用了CSRF!但禁用它是一个错误的步骤。

此链接:Codeigniter Ajax CSRF Problem实际上解决了我的问题。 使用此代码:

var post_data = {
            'res_id' : res_id,
            '<?php echo $this->security->get_csrf_token_name(); ?>' : '<?php echo $this->security->get_csrf_hash(); ?>'
        };

这只是添加了一个CSRF安全密钥,由于启用了CSRF,在提交时默认情况下每个POST方法都需要这个密钥。