我正在使用星级评分脚本here,该脚本正确更新了我的数据库,但我的跨度(avgrat和totalrat)中的返回文本未更新。应使用返回的值更新两个span标记之间的变量。
返回值:
echo json_encode($ratingRow);
HTML
<div class="col-sm-3">
<?php echo form_open('http://localhost/mysite/rating/rate'); ?>
<input name="rating" value="<?php echo $ratingRow['stars']; ?>" id="rating_star" type="hidden" postID="<?php echo $nsid; ?>" />
<div class="overall-rating">
Overall Rating of <span id="avgrat"><?php echo $ratingRow['average_rating']; ?></span> Based on <span id="totalrat"><?php echo $ratingRow['rating_number'] ?></span> votes.
</div>
<?php echo form_close(); ?>
</div>
脚本
<script type="text/javascript">
$(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: {'<?php echo $this->security->get_csrf_token_name(); ?>' : '<?php echo $this->security->get_csrf_hash(); ?>', "postID":attrVal, "ratingPoints":val},
dataType: 'json',
success : function(data) {
if (data.status == 'ok') {
$("span#avgrat").text($(this).data("average_rating"));
$("span#totalrat").text($(this).data("rating_number"));
}else{
alert('Some problem occured, please try again.');
}
}
});
}
</script>
答案 0 :(得分:1)
更改这些:
$("span#avgrat").text($(this).data("average_rating"));
$("span#totalrat").text($(this).data("rating_number"));
对于这些:
data = JSON.parse(data);
$("span#avgrat").text(data[0]["average_rating"]);
$("span#totalrat").text(data[0]["rating_number"]);
您不能在那里使用this
。 this
指的是success
函数。您必须首先使用JSON.parse(data)
解析数据。所以它成为一个字符串的JavaScript对象。 这是可选的,因为您已使用dataType: "json"
。现在它应该按预期工作。
data
是一个对象,而不是一个函数。您使用了data("rating_number")
,应该是data[0]["rating_number"]
,依此类推。请检查更新的答案。