多个ajax调用之间的延迟

时间:2013-03-21 11:53:02

标签: javascript jquery

我有5个ajax调用看起来像这样(不发布全部五个):

tabTest = {
BASE_URL : 'http://localhost/project/',
getPics : function(){

    $.ajax({
        type : 'GET',
        url : this.BASE_URL +'js/image1.js',
        dataType : "json",
        async: false,
        success: function(data){
            var pic = data.images.image[0].image_one;
                $('#pic1 img').attr("src", pic);
        }   
    });
    $.ajax({
        type : 'GET',
        url : this.BASE_URL +'js/image2.js',
        dataType : "json",
        async: false,
        success: function(data){
            var pic = data.images.image[0].image_two;           
                $('#pic2 img').attr("src", pic);
        }   
    });
   }
};

ajax调用可以正常工作,但它们都会立即触发;相反,我需要在每一个之间加一个延迟,这样它们就不会一次全部发射,而是按顺序点击一次(点击时,发生在不同的功能中),每次通话之间有5秒钟。

我尝试过使用' setTimeout'但它还没有奏效。我真的不确定如何继续这个。

3 个答案:

答案 0 :(得分:2)

如果您将AJAX调用设置为自己的setTimeout(),则没有理由不这样做:

setTimeout(function(){
    $.ajax({
        type : 'GET',
        url : this.BASE_URL +'js/image1.js',
        dataType : "json",
        async: false,
        success: function(data){
            var pic = data.images.image[0].image_one;
            $('#pic1 img').attr("src", pic);
        }   
    });
}, 5000);

然后为每个呼叫增加5000的持续时间。所以第二个看起来像:

setTimeout(function(){
    $.ajax({
        type : 'GET',
        url : this.BASE_URL +'js/image2.js',
        dataType : "json",
        async: false,
        success: function(data){
            var pic = data.images.image[0].image_one;
            $('#pic2 img').attr("src", pic);
        }   
    });
}, 10000);

您也可以将函数放在上一个请求的回调中,尽管请求失败意味着不会调用所有后续的AJAX请求。

答案 1 :(得分:1)

尝试在之前的成功回调函数上添加下一个ajax调用。

$.ajax({
type : 'GET',
url : this.BASE_URL +'js/image1.js',
dataType : "json",
async: false,
success: function(data){
    var pic = data.images.image[0].image_one;
        $('#pic1 img').attr("src", pic);
   $.ajax({
      type : 'GET',
      url : this.BASE_URL +'js/image2.js',
      dataType : "json",
      async: false,
      success: function(data){
          var pic = data.images.image[0].image_two;           
              $('#pic2 img').attr("src", pic);
      }   
  });
}   

});

OR

$.ajax({
        type : 'GET',
        url : this.BASE_URL +'js/image1.js',
        dataType : "json",
        async: false,
        success: function(data){
            var pic = data.images.image[0].image_one;
                $('#pic1 img').attr("src", pic);
            call2();
        }   
    });

function call2(){
    $.ajax({
        type : 'GET',
        url : this.BASE_URL +'js/image2.js',
        dataType : "json",
        async: false,
        success: function(data){
            var pic = data.images.image[0].image_two;           
                $('#pic2 img').attr("src", pic);
        }   
    });
}

所以现在当第一个ajax完成时,下一个呼叫将会激活。

答案 2 :(得分:0)

您可以使用setInterval()。当使用setInterval()时,它可以记录你提到功能的时间......你看看秒......

setInterval("functionname()",50000);    
相关问题