2013-03-21 266 views
1

我有一个看起来像这样5次Ajax调用(不张贴的所有5个):延迟调用

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',但它还没有工作。我真的不知道如何继续这一个。

回答

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请求将不会被调用。

+0

结束语Ajax调用内的setTimeout工作。我曾尝试过这个解决方案,但因为我太累了,我看不到我收到的任何错误都是次要的(在ajax调用中调整URL),并且我的原始想法是正确的。这发生在我现在两次,我自己找到解决方案,认为它不起作用,因为我半睡着了,在SOF上发布,并有像你这样的人指出明显。感谢您将我唤醒,向我展示我的方式错误! – max7 2013-03-21 16:28:45

+1

没问题最大,很高兴有帮助。 – George 2013-03-21 16:30:15

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将完成,然后下次调用将火所以现在。

0

您可以使用setInterval()。当使用setInterval()它可以CALü提到的功能时笏...ü看看秒......

setInterval("functionname()",50000);