当前位置: 首页 > 面试题库 >

在重复的jQuery / Ajax函数中设置延迟

钱京
2023-03-14
问题内容

我正在尝试为可重复查询添加延迟。

我发现.delay不是这里使用的那个。相反,我应该使用setInterval或setTimeout。我都尝试过,没有运气。

这是我的代码:

<?php 
include("includes/dbconf.php");

$strSQL = mysql_query("SELECT workerID FROM workers ORDER BY workerID ASC");
while($row = mysql_fetch_assoc($strSQL)) {
?>
<script id="source" language="javascript" type="text/javascript">

  $(setInterval(function ()
  {
    $.ajax({                                      
      cache: false,
      url: 'ajax2.php',        
      data: "workerID=<?=$row['workerID'];?>",
      dataType: 'json',    
      success: function(data)
      {
        var id = data[0];              //get id
        var vname = data[1];           //get name
        //--------------------------------------------------------------------
        // 3) Update html content
        //--------------------------------------------------------------------
        $('#output').html("<b>id: </b>"+id+"<b> name: </b>"+vname);
      } 
    });
  }),800);

  </script>
<?php
}
?>
<div id="output"></div>

该代码工作正常,它按要求输出结果。它只是加载而没有延迟。timout和/或间隔似乎不起作用。

有人知道我在做什么错吗?


问题答案:

我从来不明白为什么人们总是间隔一定时间添加他们的AJAX请求,而不是让成功的AJAX呼叫自己来呼叫,而同时又冒着通过多个请求造成服务器负载沉重的风险,而不仅仅是在成功的呼叫返回后再发起另一个呼叫。

有鉴于此,我喜欢编写解决方案,其中AJAX调用仅在完成时调用它们自己,例如:

// set your delay here, 2 seconds as an example...
var my_delay = 2000;

// call your ajax function when the document is ready...
$(function() {
    callAjax();
});

// function that processes your ajax calls...
function callAjax() {
    $.ajax({
        // ajax parameters here...
        // ...
        success: function() {
            setTimeout(callAjax, my_delay);
        }
    });
}

我希望这是有道理的!:)

更新:

在再次审查之后,已经引起我的注意,我需要澄清和解决的原始问题中的PHP代码中也存在一个问题。

尽管上面的脚本在创建AJAX调用之间的延迟方面非常有用,但是在原始帖子中将其添加到PHP代码后,该脚本将被echo删除与SQL查询选择的行数一样多的次数,从而创建了多个函数相同的名称,并且可能同时进行所有AJAX调用…一点都不酷…

考虑到这一点,我提出了以下附加解决方案-
array使用PHP脚本创建一个,该脚本可以被JavaScript一次消化一个元素,以实现所需的结果。首先,PHP构建JavaScript数组字符串…

<?php 
    include("includes/configuratie.php");
    $strSQL = mysql_query("SELECT workerID FROM tWorkers ORDER BY workerID ASC");

    // build the array for the JavaScript, needs to be a string...
    $javascript_array = '[';
    $delimiter = '';
    while($row = mysql_fetch_assoc($strSQL))
    {
        $javascript_array .= $delimiter . '"'. $row['workerID'] .'"'; // with quotes
        $delimiter = ',';
    }
    $javascript_array .= ']';
    // should create an array string, something like:
    // ["1","2","3"]
?>

接下来,JavaScript来消化和处理我们刚刚创建的数组。

// set your delay here, 2 seconds as an example...
var my_delay = 2000;

// add your JavaScript array here too...
var my_row_ids = <?php echo $javascript_array; ?>;

// call your ajax function when the document is ready...
$(function() {
    callAjax();
});

// function that processes your ajax calls...
function callAjax() {
    // check to see if there are id's remaining...
    if (my_row_ids.length > 0)
    {
        // get the next id, and remove it from the array...
        var next_id = my_row_ids[0];
        my_row_ids.shift();
        $.ajax({
            cache    : false,
            url      : 'ajax2.php',
            data     : "workerID=" + next_id, // next ID here!
            dataType : 'json',
            success  : function(data) {
                           // do necessary things here...
                           // call your AJAX function again, with delay...
                           setTimeout(callAjax, my_delay);
                       }
        });
    }
}


 类似资料:
  • 问题内容: 我试图在加载器图标和​​成功的html之间添加一个小的延迟(2秒)。 我尝试使用的是setTimeout并放入延迟号。这是行不通的,所以我希望您能告诉我正确的方法是什么。 我的ajax代码: 现在,它运行得非常快。希望有人能帮忙。 问题答案: 应该用在里面 。

  • 我有AJAX响应,其中引用了所有对。我想删除任何数值中的引号。我需要在全球范围内完成这项工作,对于所有AJAX请求,只需付出最小的努力。 我正在使用来处理大多数请求,并且我想要一个不需要单独调整每个当前AJAX请求的解决方案。(我不想在每个现有的调用中添加一个调用。) 例如: 对于所有AJAX请求,我该如何做到这一点? 我目前的最终目标是使用来处理数据(感谢这个问题)。不过,我不知道如何将其连接到

  • 问题内容: 如何每10秒重复jQuery ajax调用? 我试图用函数包装$ .ajax并使用setInterval调用该函数 但它说“未定义ajaxd” 问题答案: 您的方法不应放在 ready 方法内部,否则 只能在 此处使用,而不能在外部使用。

  • 问题内容: 为了解决CSRF问题,我为Ajax使用了客户端设置: 直到今天,一切正常。但是现在我需要在发布之前做一些检查: CSRF验证失败。请求中止。据我了解,我只是取消了ajaxSetup对新功能的操作。如何将这两件事结合起来? 问题答案: 使用代替。 如您所说,定义了默认处理程序,然后可以将其覆盖。使用,您可以注册多个处理程序以在发送ajax请求之前触发。与自定义处理程序配合正常。

  • 问题内容: 我想在更改背景之间的命令之间设置延迟。我尝试使用线程计时器,并尝试使用运行和捕获。但这不起作用。我试过了 但这只是变成黑色。 问题答案: 试试这个代码:

  • 我只是想知道是否有人能帮我解决这个问题。作为我学校项目的一部分,我目前正在为大学锦标赛设计一个计分程序。 现在,我有一个单间的主菜单。py文件,但我有一个不同的注册学生函数。py文件。到目前为止,我已经成功地将该函数调用到主菜单程序中 因此,我调用了register student函数末尾的主菜单函数。这可以让你注册一个学生(他的名字会被添加到一个文本文件中),然后把你送回主菜单,让用户选择另一个