Codeigniter AJAX JQuery csrf_protection星级评分脚本

时间:2015-12-30 21:56:01

标签: javascript php jquery ajax codeigniter

我正在使用星级评分脚本here,但我正在使用Codeigniter并启用CSRF_PROTECTION。当我点击星星并调用脚本时,我收到500 Internal Server Error。我在这里发现了一些类似的帖子,但没有一个能帮助我解决我的问题。

我尝试了一个我在网上发现的修复,声明创建ajaxSetup(见下文)函数首先合并"数据"用我的函数中的数据发送令牌。

我不懂JavaScript,所以我花了好几天才弄明白这个问题。 ajaxSetup无法正常工作。如果我关闭CRSF_PROTECTION,则脚本可以正常工作。

帮助!拜托,我对此感到震惊,并希望让它工作,因为我还想使用其他Jquery脚本。

$.ajaxSetup({
data: { <?php echo $this->config->item('csrf_token_name'); ?>:
$.cookie('<?php echo $this->config->item('csrf_cookie_name'); ?>') 
}
});

以下是所有Java脚本。

<script type="text/javascript">
        $.ajaxSetup({
            data: {
            <?php echo $this->config->item('csrf_token_name'); ?>: $.cookie('<?php echo $this->config->item('csrf_cookie_name'); ?>') 
            }
        });

            $(function() {
                $("#rating_star").codexworld_rating_widget({
                    starLength: '5',
                    initialValue: $('#rating_star').val(),
                    callbackFunctionName: 'processRating',
                    imageDirectory: '<?php echo base_url(); ?>i/icon',
                    inputAttr: 'postID'
                }); 
            });

            function processRating(val, attrVal){
                $.ajax({
                    type: 'POST',
                    url: '<?php echo base_url(); ?>rating/rate',
                    data: 'postID='+attrVal+'&ratingPoints='+val,
                    dataType: 'json',
                    success : function(data) {
                        if (data.status == 'ok') {
                            $('#avgrat').text(data.average_rating);
                            $('#totalrat').text(data.rating_number);
                        }else{
                            alert('Some problem occured, please try again.');
                        }
                    }
                });
            }

    </script>

2 个答案:

答案 0 :(得分:0)

在您最初加载页面时触发的javascript中,设置如下:

$.ajaxSetup({ headers: { 'X-CSRF-TOKEN' : '<?php echo $token; ?>' } });

'X-CSRF-TOKEN'可能会有所不同,具体取决于您是否更改了该名称等,

答案 1 :(得分:0)

您在此设置数据的默认值

"ArrayProperty[5]" "DictionaryProperty[Key]"

你在这里压倒它

$.ajaxSetup();

因此令牌的值不会发送到您的服务器,您也没有将您的数据作为JSON发送,只需将其与数据一起发送

 $.ajax();

您需要以json格式发送数据

data:{"<?=$csrf['name'];?>":"<?=$csrf['hash'];?>"}

data: 'postID='+attrVal+'&ratingPoints='+val,