【问题标题】:Ajax in while loopwhile循环中的Ajax
【发布时间】:2018-06-05 08:56:53
【问题描述】:

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

我正在使用 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。关于它为什么这样做的任何逻辑?

【问题讨论】:

  • 一个函数只能有一个定义。如果在循环中定义函数,则只会在调用函数时获得最后一个版本。
  • @Barmar Tru,但是,他马上就给它打电话,所以这几乎不是问题。它也可能不是一个函数。
  • $('.imNotification').html(data); 当然会更新所有.imNotification 元素,而不仅仅是脚本标签附近的元素。
  • 啊,我是这么想的。首先使用该功能的原因是,当他们单击图像时,我打开聊天并 setTimeout(theFunction, 0) 使其重置
  • 你需要一个 ajax 函数,而不是一大堆循环。您需要一个使用$(this) 的事件,通过仅激活一个getIMNotification() 函数来作用于当前元素。您想将this$(this) 输入到函数中。

标签: php ajax


【解决方案1】:

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

您还需要将结果放入该消息的特定 DIV 中。 .imNotification 选择该类的所有 DIV。您可以在 DIV 的 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>
";

【讨论】:

  • 是的,完美!所以我在将 id 变量设置为参数并在循环中传递类似于您的答案之前尝试了类似的东西,但是它在 div 上设置了 id 和 target,这使得选择器单独加载!非常感谢您的时间和解释!
猜你喜欢
  • 1970-01-01
  • 2015-11-02
  • 2014-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-24
  • 2016-11-27
  • 1970-01-01
相关资源
最近更新 更多