像不喜欢使用单个复选框php ajax

时间:2018-10-17 05:34:16

标签: javascript php jquery ajax

我已经检查了所有与SO相关的问题,但仍在寻找最佳答案。

我正在编写一个评论系统,任何人都可以评论和登录的用户都可以喜欢他们的评论(仅喜欢或撤消他们的喜欢...不喜欢)。

为此,我正在使用一个复选框,然后onClick调用一个ajax函数,该函数将喜欢该评论,如果再次单击,它将撤消该操作。

问题

最初,当有人喜欢该评论时,ajax调用会喜欢它,并且在成功时,它将attr onClick更改为different();。功能,但是当我单击它时,它仍然无法正常工作...

我的尝试

const example = function generateExample(defaultList) {
  let container = new Map(defaultList)
  return {
    add(list) {
      container = new Map(container.concat(list));
    },
    remove(list) {
      container = new Map(container.filter(item => !list.includes(item)))
    },
    read(id) {
      return container.get(id)
    },
  }
}

和JS(传递给JS函数的ID看起来像1105-249532-18117)

<?php if($review['is_liked']){ ?>
    <input type="checkbox" name="review_like" id="<?php echo $review['review_id'] . '-' . $review['customer_id'] . '-' . $review['product_id']; ?>" checked="checked" onclick="unlike(<?php echo $review['review_id'] . '-' . $review['customer_id'] . '-' . $review['product_id']; ?>);" />
<?php } else { ?>
    <input type="checkbox" name="review_like" id="<?php echo $review['review_id'] . '-' . $review['customer_id'] . '-' . $review['product_id']; ?>" onclick="like(<?php echo $review['review_id'] . '-' . $review['customer_id'] . '-' . $review['product_id']; ?>);" />
<?php } ?>

我要传递给like / unlike函数的id在控制台中无法正常工作,并且即使使用toString func或wdout,拆分函数也是如此...

请解决此问题或提出更好的方法来完成此任务...

1 个答案:

答案 0 :(得分:0)

您可以在客户端以更简单的条件来处理它。将标记更改为:

<input type="checkbox" name="review_like" data-id="<?php echo $review['review_id']; ?>" data-customer="<?php echo $review['customer_id'] ?>" data-product="<?php echo $review['product_id']; ?>" checked="<?php echo ( $review['is_liked'] ? "checked" : ""); ?>" />

并添加此jQuery脚本以处理复选框更改:

$('input[name="review_like"]').change ( function ()
{
  $.ajax (
  {
    url: 'index.php?route=product/product/like_review',
    type: "get",
    data:
    {
      'is_liked': $(this).prop('checked'),
      'review_id': $(this).data ( 'id'),
      'customer_id': $(this).data ( 'customer'),
      'product_id': $(this).data ( 'product')
    },
    dataType: 'json',
    success: function ( json)
    {
      console.log ( ( $(this).prop('checked') ? 'Unliked' : 'Liked') + ' review ' + $(this).data ( 'id') + ', customer ' + $(this).data ( 'customer') + ', product ' + $(this).data ( 'product'));
    },
    error: function ( xhr, ajaxOptions, thrownError)
    {
      alert ( thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
    }
  });
});