繁体   English   中英

Codeigniter AJAX JQuery csrf_protection星级脚本

[英]Codeigniter AJAX JQuery csrf_protection star rating script

我在这里使用星级评定脚本但在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>

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

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

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

您在此处设置数据的默认值

$.ajaxSetup();

而你在这里覆盖它

 $.ajax();

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

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

您需要以json格式发送数据

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

data:{"<?=$csrf['name'];?>":"<?=$csrf['hash'];?>", "postID":attrVal, "ratingPoints":val}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM