dsmlf1207915 2017-10-19 13:07
浏览 23
已采纳

按订单运行ajax请求

How can I send ajax in a for loop by order? Here is my code:

function ajax_sent(i, btn){
    jQuery.ajax({
       url  : ln_ajax_handle.ajax_url,
       type : 'post',
       data : {
            action    : 'ln_ajax_handle',
            main_data : i
        },
        success : function(result){
            jQuery('#ln-modal-bangchinh').append(result);
            if(i === 5){
                btn.button('reset');
                jQuery('#ln-content-modal').modal('show');
            }
        }
   });
}

jQuery(document).ready(function(){
    jQuery('.ln-update').click(function(){
        var btn = jQuery(this);
        btn.button('loading');

        for(var i = 1; i <= 5; ++i){
            ajax_sent(i, btn);
        }
    });
});

And here is simple php test function:

function ln_ajax_handle(){
    $data = $_POST['main_data'];

    echo ln_alert_test($data);

    wp_die();
}

function ln_alert_test($data){
    ob_start();
    ?>
    <div class="alert">
      <button type="button" class="close" data-dismiss="alert">&times;</button>
      <strong>Success!</strong> The loop run by <?php echo $data; ?> times;
    </div>
    <?php    return ob_get_clean();
}

In php file, I use echo to get simple test. But the results are numbers is not sort by order, like as image. enter image description here . I want when i = 1, and I get responsed from server, i = 2 will be execute. and next progress is same. Any way to do this?

  • 写回答

1条回答 默认 最新

  • dongwei3172 2017-10-19 13:19
    关注

    You need to chain the ajax requests in such a way every other request starts after the previous one finishes.

    var i = 1,
      fn = function() {
        i <= 5 && ajax_sent(++i, btn, fn);
      };
    
    ajax_sent(i, btn, fn);
    
     // add a callback cb to be called on success
    function ajax_sent(i, btn, cb) {
      jQuery.ajax({
        url: ln_ajax_handle.ajax_url,
        type: 'post',
        data: {
          action: 'ln_ajax_handle',
          main_data: i
        },
        success: function(result) {
          // if a callback was provided call it
          cb && cb();
          jQuery('#ln-modal-bangchinh').append(result);
          if (i === 5) {
            btn.button('reset');
            jQuery('#ln-content-modal').modal('show');
          }
        }
      });
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上