javascript - 如何使用 ID 循环 JavaScript 函数?

标签 javascript php html ajax

我有一个用 PHP 生成的矩阵表。我想根据 DNS 调用的结果显示“检查”或“交叉”。该表矩阵可以包含超过 200.000 个单元格。

我尝试将所有 PHP 代码放在同一页面上,但是如果有很多 DNS 调用要做,PHP 就会超时。 我转向了ajax。在每个单元格内添加一个 DIV,并放置调用第二个 PHP 的 ajax 代码,该代码将执行 DNS 查询。这效果很好,但在 5000-6000 个请求之后,某些单元格未填充。我的猜测是因为该脚本试图同时调用所有单元格。

这是一种让 ajax 一次对每个单元格进行调用的方法吗?

我有这个 PHP 代码:

$body .= '
  <script type="text/javascript">
';

foreach (getEachIpInRange($cidr) as $IP) {
    foreach ($rbls as $rbl) {
        $divid++;
        $body .= '    function updatediv' . $divid . '() {
      $.ajax({
        type: \'get\',
        url: \'verify.php?ip=' . $IP . '&dns=' . $rbl . '\',
        data: $(self).serialize(),
        success: function(data) {
          $("#div'  . $divid .  '").html(data).text();
        }
      })
    }
';
    }
}

$body .= '  </script>
';

生成以下代码:

  <script type="text/javascript">
    function updatediv1() {
      $.ajax({
        type: 'get',
        url: 'verify.php?ip=123.123.123.123&dns=host.domain1.tld',
        data: $(self).serialize(),
        success: function(data) {
          $("#div1").html(data).text();
        }
      })
    }
    function updatediv2() {
      $.ajax({
        type: 'get',
        url: 'verify.php?ip=234.234.234.234&dns=host.domain2.tld',
        data: $(self).serialize(),
        success: function(data) {
          $("#div2").html(data).text();
        }
      })
    }
    function updatediv3() {
      $.ajax({
        type: 'get',
        url: 'verify.php?ip=345.345.345.345&dns=host.domain3.tld',
        data: $(self).serialize(),
        success: function(data) {
          $("#div3").html(data).text();
        }
      })
    }
    function updatediv4() {
      $.ajax({
        type: 'get',
        url: 'verify.php?ip=456.456.456.456&dns=host.domain4.tld',
        data: $(self).serialize(),
        success: function(data) {
          $("#div4").html(data).text();
        }
      })
    }

最好的方法是使用一个函数来逐个更新每个单元格。 但如果不可能,我如何在所有函数之间循环并运行它们,在每个函数之间给出 25 毫秒或 30 毫秒的间隔以避免超时?

最佳答案

请不要为每个单元格生成一个函数;那是臃肿的。只需创建一个函数,该函数接受一个数字作为参数,并使用它来进行正确的调用、选择正确的单元格等。

function updatediv(n) {
  const ipPart = `${n}${n+1}${n+2}`;
  $.ajax({
    type: 'get',
    url: `verify.php?ip=${ipPart}.${ipPart}.${ipPart}.${ipPart}&dns=host.domain${n}.tld`,
    data: $(self).serialize(),
    success: function(data) {
      $(`#div${n}`).html(data).text();
    }
  })
}

从那里,您可以执行一个简单的 for 循环并为每个 n 值调用该函数。

关于javascript - 如何使用 ID 循环 JavaScript 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58239018/

相关文章:

javascript - 将 TypeScript 编译为 bundle ..现在怎么办?

php - 根据总迭代次数更改我的 css 类中的宽度

javascript - 使用 Axios 将数据从 Vue.js 传递到 PHP

html - 将图像添加到 HTML5 中的按钮

php - 它不会总结,我的代码有什么问题?

javascript - 替代已弃用的 RegExp.$n 对象属性

javascript - 将悬停、onmouseetner、onmouseleave 函数添加到 css 类、语法

javascript - 如何使用变量填充 Cordova 电子邮件编辑器字段

php - 为什么搜索查询在 PHRETS 中没有显示任何结果?

html - 将 CSS 移动到单独的文件使其无法运行