weixin_33725515 2019-10-03 09:57 采纳率: 0%
浏览 42

如何在Ajax内部实现循环?

我想做的是:

第一个Ajax上传csv文件并获取所有产品列表,然后一旦成功,它就会循环并调用另一个上传这些产品的ajax。

问题:

当它循环时,它会冻结浏览器并等待,直到所有产品都被上传,然后打印出ID。

我需要什么:

解除冻结的浏览器,并在上载每种产品后何时可以打印每个ID。

代码:

var data = new FormData();
        data.append('file', jQuery('#item_data')[0].files[0]);
        data.append('action', 'csv_upload');
        jQuery.ajax({
            url: ajaxurl,
            data: data,
            timeout: 3000,
            cache: false,
            contentType: false,
            processData: false,
            type: 'POST',
            dataType: 'json',
            success: function (data) {
                jQuery( ".wrap .all" ).html(data.information.length);
                jQuery.each(data.information, function (i, elem) {
                    add_item(elem, i);
                });
                jQuery( "#results" ).append( "<p style='color:green;'>The end!</p>" );
            }
        });

    function add_item(elem, i){
        var data = new FormData();
        data.append('action', 'product_upload');
        data.append('file_cont', JSON.stringify(elem));
        jQuery.ajax({
            async: false,
            url: ajaxurl,
            data: data,
            type: 'POST',
            processData: false,
            contentType: false,
            dataType: 'json',
            success: function (response) {
                jQuery( "#results" ).append( "<span>"+ data.message +"</span>" );
            }
        });
        jQuery( ".wrap .count" ).html(i+1);
     }
  • 写回答

1条回答 默认 最新

  • 普通网友 2019-10-03 10:01
    关注
    var data = new FormData();
    data.append('file', jQuery('#item_data')[0].files[0]);
    data.append('action', 'csv_upload');
    jQuery.ajax({
      url: ajaxurl,
      data: data,
      timeout: 3000,
      cache: false,
      contentType: false,
      processData: false,
      type: 'POST',
      dataType: 'json',
      success: function(data) {
        jQuery(".wrap .all").html(data.information.length);
        add_item(data.information, data.information[0], 0);
      }
    });
    
    
    
    function add_item(info, elem, i ) {
      var
        data = new FormData();
      data.append('action', 'product_upload');
      data.append('file_cont', JSON.stringify(elem));
      jQuery.ajax({
        url: ajaxurl,
        data: data,
        type: 'POST',
        processData: false,
        contentType: false,
        dataType: 'json',
        success: function(response) {
          if (info.length >= i + 1) {
            jQuery("#results").append("<span>" + data.message + "</span>");
            add_item(info, info[i + 1], i + 1);
            jQuery(".wrap .count").html(i + 1);
          }
        }
      });
      if(info.length == i){
                jQuery( "#results" ).append( "<p style='color:green;'>The End!</p>" );
            }
    }
    

    you can do it recursively, since setting async: false will wait for the request to finish before the next instruction is executed.

    UPDATE: removed async: false, and added with "The End" message correction.

    评论

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题