我正在使用星级评分脚本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>
答案 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,