Javascript 每个循环的JQuery,延迟不适用于post请求

Javascript 每个循环的JQuery,延迟不适用于post请求,javascript,jquery,performance,Javascript,Jquery,Performance,我必须解析30多个对象并将它们发布到php文件中。有时我会收到一个错误,因为每个函数的速度都很快。我试图通过实现一个延迟函数来解决这个问题(就像这里提到的:)。 这是我的代码: $( "#rules_textfield>div" ).each(function( index ) { var delay = (function(){ var timer = 0;

我必须解析30多个对象并将它们发布到php文件中。有时我会收到一个错误,因为每个函数的速度都很快。我试图通过实现一个延迟函数来解决这个问题(就像这里提到的:)。 这是我的代码:

              $( "#rules_textfield>div" ).each(function( index ) {
                var delay = (function(){
                  var timer = 0;
                  return function(callback, ms){
                    clearTimeout (timer);
                    timer = setTimeout(callback, ms);
                  };
                })();
                delay(function(){
                  $.post( "getdata.php", { 'parameter1': parameter1, 'parameter2': parameter2})
                  .done(function( data ) {

                    $("#logs_result").append(data);
                  });
                }, 1000);
              });

但它似乎只适用于1次迭代。在此之后的所有迭代都没有延迟。

您没有按照相关代码中提到的完全相同的方式进行。我会从你的代码中删除一些东西

  • 不需要
    clearTimeout()
    ,因为它在setTimeout完成后无论如何都会被执行

  • 无需返回只启动
    setTimeout()
    的函数

  • 再看一下这个工作示例中的代码,它每次
    time+=500都会添加到计时器中

    所以,就这样吧

       var time = 1000;
       $( "#rules_textfield>div" ).each(function( index ) {
             setTimeout(function(){
                 $.post( "getdata.php", { 'parameter1': parameter1, 'parameter2': parameter2}).done(function( data ) {
                    $("#logs_result").append(data);
                 });
             }, time);
             time += 1000; //to ensure that delay is introduced for every call
       });
    

    您的操作方式与相关代码中提到的完全不同。我会从你的代码中删除一些东西

  • 不需要
    clearTimeout()
    ,因为它在setTimeout完成后无论如何都会被执行

  • 无需返回只启动
    setTimeout()
    的函数

  • 再看一下这个工作示例中的代码,它每次
    time+=500都会添加到计时器中

    所以,就这样吧

       var time = 1000;
       $( "#rules_textfield>div" ).each(function( index ) {
             setTimeout(function(){
                 $.post( "getdata.php", { 'parameter1': parameter1, 'parameter2': parameter2}).done(function( data ) {
                    $("#logs_result").append(data);
                 });
             }, time);
             time += 1000; //to ensure that delay is introduced for every call
       });
    
    你可以使用这个插件

    提供了易于使用的方法来定义迭代、超时、间隔、延迟以及基于事件的循环和处理程序,这些方法与jQuery的所有内容一致

    这里有一个CDN链接:


    例子
    $(函数(){
    $('#rules_textfield>div')。每个($)。等待(1000,函数(索引){
    $('#logs_result')。追加($(''.html(this.html());
    });
    });
    
    
    福
    酒吧
    噢
    拉布
    
    您可以使用该插件

    提供了易于使用的方法来定义迭代、超时、间隔、延迟以及基于事件的循环和处理程序,这些方法与jQuery的所有内容一致

    这里有一个CDN链接:


    例子
    $(函数(){
    $('#rules_textfield>div')。每个($)。等待(1000,函数(索引){
    $('#logs_result')。追加($(''.html(this.html());
    });
    });
    
    
    福
    酒吧
    噢
    拉布