jquery中的每一个都未按预期工作
我有以下代码jquery中的每一个都未按预期工作,jquery,Jquery,我有以下代码 var last_id = ''; $('.products').each(function(){ $.ajax({ type: "POST", url: "index.php", data: 'id='+last_id, success: function(id){ last_id = id; } }); }); 我的问题是,我想从ajaxsuccess中获取最后
var last_id = '';
$('.products').each(function(){
$.ajax({
type: "POST",
url: "index.php",
data: 'id='+last_id,
success: function(id){
last_id = id;
}
});
});
我的问题是,我想从ajaxsuccess中获取最后一个插入的id,并在id第二次调用时将其传递给ajax。
但现在它无法获取最后一个_id,第二次它再次以空字符串的形式发送
但是当我在ajax成功中提醒它时,它会提醒最后一个id吗?
如何实现它?Ajax调用是否返回JSON数据?如果是,请尝试:
success: function(data){
last_id = data.id;
}
或者类似的东西。异步:ajax函数选项中的false将有所帮助。
但是我认为您走错了:)您不应该执行这么多ajax查询。这不起作用,因为当您发送第二个请求时,第一个请求的响应还没有到达。这是因为您发送的请求都是异步的,所以第二个请求不会等待第一个请求完成。这就是第二次发送空字符串的原因 发送同步请求的一种方法是将
async
选项设置为false
转到此处并在那里搜索async
选项以找到正确的解释
但您应该注意,发送同步请求可能会暂时阻止浏览器,因为它会等待请求完成,然后再执行其他操作。$.ajax()
是异步的,这意味着它从代码分支出来,并在代码继续运行时立即执行。因此,在任何ajax调用返回之前,所有ajax调用几乎在同一时间启动。您可以在ajax的参数中使用'async':false,
,但这可能会冻结浏览器,直到所有请求完成
您可以通过等待回调进行下一次异步调用来解决此问题:
var last_id = '', count = 0;
(function getId(){
$.ajax({
type: "POST",
url: "index.php",
data: 'id='+last_id,
success: function(id){
last_id = id;
if(++count < $('.products').length)
getId();
}
});
});
})();
var last_id='',count=0;
(函数getId(){
$.ajax({
类型:“POST”,
url:“index.php”,
数据:“id=”+最后一个id,
成功:功能(id){
最后一个id=id;
如果(++计数<$('.products')。长度)
getId();
}
});
});
})();
但是
我认为在您的情况下,最好发出一个请求,让服务器用一个Id数组响应。您必须等待每个ajax
var pro=$('.products').lenght;
last_id(0,"");
function last_id(index,lastid){
$.ajax({
type: "POST",
url: "index.php",
data: 'id='+lastid,
success: function(id){
if(index<pro.length){
last_id(index+1,id);
}
}
});
});
}
var-pro=$('.products').lengh;
最后一个_id(0,“”);
函数last\u id(索引,lastid){
$.ajax({
类型:“POST”,
url:“index.php”,
数据:“id=”+lastid,
成功:功能(id){
如果(index),那是因为在发送下一个ajax调用(第2个)时,ajax调用尚未返回。我不确定您将如何成功地执行此操作。