AJAX JQuery不更新span文本

时间:2015-12-31 15:32:48

标签: php jquery ajax

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

1 个答案:

答案 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"]);

您不能在那里使用thisthis指的是success函数。您必须首先使用JSON.parse(data)解析数据。所以它成为一个字符串的JavaScript对象。 这是可选的,因为您已使用dataType: "json"现在它应该按预期工作。

data是一个对象,而不是一个函数。您使用了data("rating_number"),应该是data[0]["rating_number"],依此类推。请检查更新的答案。