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调用进行成功回调,以调用每个循环的下一次迭代。就像一个递归函数谢谢你的全面解释,可以吗