Ajax in while循环

时间:2017-12-22 18:45:34

标签: php ajax

我正在为我的邮件系统构建推送通知,并且有一个奇怪的错误。

我正在使用ajax来获取最近的消息。在我的PHP脚本中,我有一个while循环,我在其中查看结果。因此,每个<li>都是“最近的消息”。

在我看来,这很简单。我在<li>中放了一个ajax函数,当它遍历while循环时,它将发送从迭代接收的值。下面是我的PHP脚本。

$output .= "
  <li>
    <img src='$profilephoto' class='rm_pp' alt=''>
      <div class='imNotification'>
       <script>
         function getIMNotification() {
           $.ajax({
             url: 'getIMNotification.php',
             method: 'POST',
             data:{user2:'$id'},
             success:function(data) {
               $('.imNotification').html(data);
             }
           });
         }

         getIMNotification();
       </script>
     </div>
  </li>
";

例如,在我的getIMNotification.php中,如果我只是回显从我的AJAX发送的user2值,它将为每个结果回显相同的值。但是,因为它在while循环中,它不应该每次迭代都会收到新的值吗?

是否因为被调用函数?被回显的一个值是循环中的最后一个 id。关于它为什么这样做的任何逻辑?

1 个答案:

答案 0 :(得分:3)

您不应该在循环中重新定义该函数。您应该定义一次函数,并将ID作为参数。然后,您可以为每个LI分别调用它。

您还需要将结果放在该邮件的特定DIV中。 .imNotification选择该类的所有DIV。您可以在DIV的ID中使用$id来定位每个ID。

该功能不需要来自AJAX,您可以将其放在原始HTML中:

function getIMNotification(id, target) {
  $.ajax({
    url: 'getIMNotification.php',
    method: 'POST',
    data: {
      user2: id
    },
    success: function(data) {
      $('#' + target).html(data);
    }
  });
}

然后PHP将是:

$output .= "
  <li>
    <img src='$profilephoto' class='rm_pp' alt=''>
      <div class='imNotification' id='imNotification-$id'>
       <script>
         getIMNotification('$id', 'imNotification-$id');
       </script>
     </div>
  </li>
";