【问题标题】:Using Ajax & php to get multiple data onload for items in a wishlist使用 Ajax 和 php 为愿望清单中的项目获取多个数据加载
【发布时间】:2016-09-29 10:44:03
【问题描述】:

我正在尝试实现一个 ajax 函数,该函数将加载产品的 id 并检查数据库以查看该用户是否在他们的愿望清单中拥有它,然后使用该信息来更改愿望清单图标的颜色。这个在页面加载时发生。

目前该功能正在运行,但它只查看第一项,并按预期运行,但不适用于其余产品。

非常感谢您对此的任何帮助,非常感谢

JavaScript

<script type="text/javascript">
window.onload = function(){

       var link_data = $(".add-wishlist").data('data');   
       $.ajax({
          type: "POST",
          url: '../source/wishlist_control.php',
          data: ({fav_check: link_data}),
          success: function(data) {

               if(data.replace(/\s+/, "")  == 'YES')
               {
                  $('a[data-data="' + link_data + '"] > i.whishstate').css({"color":"#EB686C"})

               }
               else if (data.replace(/\s+/, "")  == 'NO'){
                   $('a[data-data="' + link_data + '"] > i.whishstate').css({"color":"gray"})

               }
               else {

               }
          } 
       });

    }; 

</script>

带有正在打印页面的id的图标

<a class="add-wishlist" href='javascript:;' data-data='<?php echo protect($usri['id']); ?>'>
<i class='fa fa-heart whishstate'></i>
</a>

php文件代码

if(isset($_POST['fav_check'])) {  
    $addmemberid = $_SESSION['user_id'];
    $addproductid = $_POST['fav_check'];
    $result = mysql_query("SELECT count(product_id) cnt FROM users_wishlist WHERE user_id = '$addmemberid' AND product_id = '$addproductid'") or die(mysql_error());
    $countid = mysql_fetch_assoc($result);
    if($countid['cnt'] == 1){
        echo 'YES';
    } else {
         echo 'NO';
    }
}

【问题讨论】:

  • 每次在新代码中使用the mysql_ 数据库扩展a Kitten is strangled somewhere in the world 时,它都已被弃用,并且已经存在多年,并且在 PHP7 中永远消失了。如果您只是学习 PHP,请花精力学习 PDOmysqli 数据库扩展。 Start here
  • 我们又来了@RiggsFolly
  • 严重的是,如果作者不更新那些过时的教程,应该从互联网上删除它们。由于这些教程,每个开始学习 PHP 的人最终都会使用 mysql_* 进行编码。
  • @PhiterFernandes 我们需要组一个群,把他们都搜出来,发布 cmets 大意是他们都过时了
  • @PhiterFernandes 是的。当我说集团时,我的意思是一个大集团

标签: javascript php jquery arrays ajax


【解决方案1】:

jquery 选择器只会选择匹配的数据第一个元素。要对所有元素执行此操作,您必须使用 jQuery each 函数遍历它们:

$(".add-wishlist").each(function() {
   var link_data = $(this).data('data');   
   $.ajax({
      type: "POST",
      url: '../source/wishlist_control.php',
      data: ({fav_check: link_data}),
      success: function(data) {

           if(data.replace(/\s+/, "")  == 'YES')
           {
              $('a[data-data="' + link_data + '"] > i.whishstate').css({"color":"#EB686C"})

           }
           else if (data.replace(/\s+/, "")  == 'NO'){
               $('a[data-data="' + link_data + '"] > i.whishstate').css({"color":"gray"})

           }
           else {

           }
      } 
});

【讨论】:

    【解决方案2】:

    不要将 AJAX 调用置于循环中,而是尝试创建一个愿望清单 ID 数组,然后在单个 AJAX 调用中将其发布到服务器。然后在服务器中,您可以获取相应的数据并将其作为数组返回给 AJAX 成功函数。这将节省多个 AJAX 请求并提高性能。
    所以代码看起来像这样:

    var link_data = [];
    $(".add-wishlist").each(function() {
      link_data.push($(this).data('data'));
    });
    $.ajax({
      type: "POST",
      url: '../source/wishlist_control.php',
      data: ({fav_check: link_data}),
    ......
    ......
    

    【讨论】:

    • 我该怎么做呢?我仍在努力学习 php 和 ajax,因此非常感谢您对此信息的任何帮助,
    • ajax 调用有效:D,在 php 端我如何处理这个,我收到错误“注意:第 29 行中的数组到字符串转换”,再次感谢您帮助我:)
    • 在 php 端,您可以循环遍历数组并查询每个 ID 的数据库。然后将查询结果存储在一个数组中,并在 ajax 成功时将其返回。
    • 嘿,这是我为处理请求而编写的代码,但成功预期只是 YES,但现在我返回的只是实际成功的产品的 id。
    • 这是代码if(isset($_POST['fav_check'])) { $addmemberid = $_SESSION['user_id']; $addproductid = $_POST['fav_check']; $search = "SELECT * FROM users_wishlist WHERE user_id = '$addmemberid' AND product_id IN (" . implode(',', $addproductid) . ")"; #echo $search; $result = mysql_query($search) or die(mysql_error()); $rows = []; while ($row = mysql_fetch_assoc($result)) { array_push($rows, $row); } #var_dump($rows); foreach($rows as $item) { #echo "{"; echo $item['product_id']; echo ","; } #echo "}"; }
    猜你喜欢
    • 2022-01-20
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    • 2023-01-17
    • 1970-01-01
    相关资源
    最近更新 更多