我有以下代码。
var last_id = '';
$('.products').each(function(){
$.ajax({
type: "POST",
url: "index.php",
data: 'id='+last_id,
success: function(id){
last_id = id;
}
});
});
我的问题是,我希望从ajax成功获取最后一个插入的id,并在第二次id调用时将其传递给ajax。 但现在它无法获取last_id,并且在第二次它再次作为空字符串发送 但是当我在ajax成功时提醒它时它会警告最后一个id? 我怎样才能实现它?
答案 0 :(得分:2)
它不起作用,因为当您发送第二个请求时,第一个请求的响应尚未到达。这就是它的方式,因为您发送的请求都是异步的,因此第二个请求不会等待第一个请求完成。这就是第二次发送空字符串的原因。
发送同步请求的一种方法是将async
选项设置为false
。
转到此link并在那里搜索async
选项以找到正确的解释。
但您应该注意,发送同步请求可能会暂时阻止浏览器,因为它会在执行任何其他操作之前等待请求完成。
答案 1 :(得分:1)
async:false会有所帮助。 但我认为你的方向错误:)你不应该执行这么多的ajax查询。
答案 2 :(得分:1)
$.ajax();
是异步的,这意味着它会从代码中分离出来并在代码继续运行时立即执行。所以你的所有ajax调用几乎在它们返回之前的同一时间开始。您可以在params中使用'async': false,
来获取ajax,但这可能会冻结浏览器直到所有请求都完成。
你可以通过等待回调来异步进行下一次调用来解决这个问题:
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();
}
});
});
})();
但是
我认为在您的情况下,最好发出一个请求并让服务器以Id的 JSON 数组进行响应。
答案 3 :(得分:0)
Ajax调用是否返回JSON数据?如果是这样,试试:
success: function(data){
last_id = data.id;
}
或类似的东西。
答案 4 :(得分:0)
你必须等待每个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);
}
}
});
});
}