Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 在Ajax内部创建Ajax循环_Jquery_Ajax_Loops - Fatal编程技术网

Jquery 在Ajax内部创建Ajax循环

Jquery 在Ajax内部创建Ajax循环,jquery,ajax,loops,Jquery,Ajax,Loops,我想做的是: 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,

我想做的是:

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);
     }
首先,Ajax上传csv文件并获取所有产品列表。一旦成功,它将通过循环调用另一个ajax来上传这些产品

问题:

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);
     }
当它通过循环时,它会冻结浏览器并等待每个产品上传,然后打印出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);
     }
为了摆脱冻结的浏览器,当它可以打印每个产品上传后的每个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);
     }
var data=new FormData();
data.append('file',jQuery('#item_data')[0].files[0]);
data.append('action','csv_upload');
jQuery.ajax({
url:ajaxurl,
数据:数据,
超时:3000,
cache:false,
contentType:false,
processData:false,
键入:“POST”,
数据类型:“json”,
成功:功能(数据){
jQuery(“.wrap.all”).html(data.information.length);
jQuery.each(数据、信息、函数(i、elem){
添加_项(元素,i);
});
jQuery(“#results”)。追加(

结尾!

”; } }); 功能添加项(元素,i){ var data=new FormData(); data.append('action','product_upload'); data.append('file_cont',JSON.stringify(elem)); jQuery.ajax({ async:false, url:ajaxurl, 数据:数据, 键入:“POST”, processData:false, contentType:false, 数据类型:“json”, 成功:功能(响应){ jQuery(“#results”).append(“+data.message+”); } }); jQuery(“.wrap.count”).html(i+1); }
var data=new FormData();
data.append('file',jQuery('#item_data')[0].files[0]);
data.append('action','csv_upload');
jQuery.ajax({
url:ajaxurl,
数据:数据,
超时:3000,
cache:false,
contentType:false,
processData:false,
键入:“POST”,
数据类型:“json”,
成功:功能(数据){
jQuery(“.wrap.all”).html(data.information.length);
添加_项(数据信息,数据信息[0],0);
}
});
功能添加项(信息、元素、i){
变量
数据=新表单数据();
data.append('action','product_upload');
data.append('file_cont',JSON.stringify(elem));
jQuery.ajax({
url:ajaxurl,
数据:数据,
键入:“POST”,
processData:false,
contentType:false,
数据类型:“json”,
成功:功能(响应){
如果(信息长度>=i+1){
jQuery(“#results”).append(“+data.message+”);
添加_项(信息,信息[i+1],i+1);
jQuery(“.wrap.count”).html(i+1);
}
}
});
如果(信息长度==i){
jQuery(“#results”)。追加(

结尾!

”; } }
可以递归执行,因为设置
async:false
将等待请求完成,然后再执行下一条指令

更新:删除了
async:false
,并添加了“结束”消息更正。

var data=new FormData();
data.append('file',jQuery('#item_data')[0].files[0]);
data.append('action','csv_upload');
jQuery.ajax({
url:ajaxurl,
数据:数据,
超时:3000,
cache:false,
contentType:false,
processData:false,
键入:“POST”,
数据类型:“json”,
成功:功能(数据){
jQuery(“.wrap.all”).html(data.information.length);
添加_项(数据信息,数据信息[0],0);
}
});
功能添加项(信息、元素、i){
变量
数据=新表单数据();
data.append('action','product_upload');
data.append('file_cont',JSON.stringify(elem));
jQuery.ajax({
url:ajaxurl,
数据:数据,
键入:“POST”,
processData:false,
contentType:false,
数据类型:“json”,
成功:功能(响应){
如果(信息长度>=i+1){
jQuery(“#results”).append(“+data.message+”);
添加_项(信息,信息[i+1],i+1);
jQuery(“.wrap.count”).html(i+1);
}
}
});
如果(信息长度==i){
jQuery(“#results”)。追加(

结尾!

”; } }
可以递归执行,因为设置
async:false
将等待请求完成,然后再执行下一条指令


更新:删除了
async:false
,并添加了“结束”消息更正。

感谢Nijeesh的回复,但这就是为什么我添加了
async:false
来添加项目,因为此函数只上载1个产品,因为此函数在循环中。如果添加
async:false
,浏览器将冻结,直到请求得到解决。若您不希望发生这种情况,可以对
add\u item
ajax调用进行成功回调,以调用每个循环的下一次迭代。就像一个递归函数谢谢你的详细解释,你能告诉我怎么做吗?或者举个例子?非常感谢。我用
setTimeout
制作了一个非常粗糙的版本,也许这会为您清除一些问题,所以您的代码只需等待一段时间,然后执行cb()函数?我认为这不是正确的答案,因为没有ajax,只是等待一段时间,然后执行。。。我想的是得到一些响应并执行另一项。有什么更聪明的方法可以做到这一点吗?感谢Nijeesh的回复,但这就是为什么我添加了
async:false
来添加_项,因为这个函数只上载一个产品,因为这个函数在循环中。如果添加
async:false
,浏览器将冻结,直到请求得到解决。若您不希望发生这种情况,可以对
add\u item
ajax调用进行成功回调,以调用每个循环的下一次迭代。就像一个递归函数谢谢你的全面解释,可以吗