javascript - AJAX 仅返回最后一个数组项

标签 javascript php

我想创建异步 AJAX 查询来在网页完成加载时检查服务器状态。不幸的是,当涉及到处理后的 PHP 数据显示时,我只收到单个值。

JS:

<script>

  window.onload = function() {
      test();
    };

  function test()
  {
      var h = [];

      $(".hash td").each(function(){

        var hash = $(this).closest('#h').text();

        if (hash) {
            $.ajax({
                url: 'stat.php',
                method: 'POST',
                async: true,
                data: {hs: JSON.stringify(hash)},
                success: function(data) {
                    $('.result').replaceWith(data);
                }
            });
        }
      });
    }
</script>

PHP:

<?php

require_once ('inc/config.php');
require_once ('inc/libs/functions.php');

if (isset($_POST['hs'])) {

  $hash = json_decode($_POST['hs']);

  serverstatus($hash);
}

function serverstatus($hash) {

    $address = DB::queryFirstRow("SELECT address,hash FROM servers WHERE hash=%s", $hash);

    $address_exploded = explode(":", $address['address']);
    $ip = $address_exploded[0];
    $port = $address_exploded[1];

    $status = isServerOnline($ip,$port);

    if ($status) {
      $s = "Online $ip";
    } else {
      $s = "Offline";
    }
    echo $s;
}

?>

我将 PHP 的结果嵌入到表行中。我看到 AJAX 迭代数组,但所有行都收到相同的值(数组中最后检查的元素)。

最佳答案

$('.result') 匹配具有 result 类的所有元素。然后,replaceWith 会将它们替换为您提供的内容。

如果您只想影响某些结构中的 .result 元素(也许是同一行?),则需要使用 find 或类似的:

function test()
{
    var h = [];

    $(".hash td").each(function(){
        var td = $(this);                              // <====
        var hash = td.closest('#h').text();
        var result = td.closest("tr").find(".result"); // <====

        if (hash) {
            $.ajax({
                url: 'stat.php',
                method: 'POST',
                async: true,
                data: {hs: JSON.stringify(hash)},
                success: function(data) {
                    result.replaceWith(data);          // <====
                }
            });
        }
    });
}

显然

var result = td.closest("tr").find(".result"); // <====

...需要调整为您真正想要的样子,但这就是想法。

<小时/>

您问题中的这一行暗示了一种反模式:

var hash = $(this).closest('#h').text();

id必须在文档中是唯一的,因此您永远不需要找到与任何给定元素“最接近”的值。如果 DOM 中有多个 id="h" 元素,请将其更改为使用 classdata-* 属性。

关于javascript - AJAX 仅返回最后一个数组项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54633331/

相关文章:

javascript - .offset() 并检查 jQuery 中的位置

javascript - 使用从服务器动态填充的信息对 HTML 表进行排序

php pdo 插入语句不起作用

php - PDO - 如果这些查询中的任何一个返回空结果,则捕获

php - 用于在 Wordpress 中访问 MySQL 数据库的 JavaScript + PHP

php - 需要解释 $_GET 的 isset

javascript - 制作几个js函数的for循环

javascript - 如何让这个 jQuery 脚本在多个元素上单独运行

javascript - 打开 jquery 对话框后页面空白

PHP + FTP 删除文件夹中的文件