每个jquery都没有按预期工作

时间:2011-07-26 05:36:26

标签: jquery

我有以下代码。

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? 我怎样才能实现它?

5 个答案:

答案 0 :(得分:2)

它不起作用,因为当您发送第二个请求时,第一个请求的响应尚未到达。这就是它的方式,因为您发送的请求都是异步的,因此第二个请求不会等待第一个请求完成。这就是第二次发送空字符串的原因。

发送同步请求的一种方法是将async选项设置为false

转到此link并在那里搜索async选项以找到正确的解释。

但您应该注意,发送同步请求可能会暂时阻止浏览器,因为它会在执行任何其他操作之前等待请求完成。

答案 1 :(得分:1)

ajax函数选项中的

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);
            }
        }
    });
});
}