2017-04-18 64 views
-3

给定一个请求的URL列表,我需要随时保持5个请求的活动,并不是所有的请求都会花费同一时间,所以如果一个完成,我想发送一个新的请求。我尝试了几种方法,并在$ .all和$ .when文档中查找,但我无法弄清楚如何完成此操作。在时间保留5 ajax请求

有人能指出我解决这个问题的正确方向吗?

+0

你是什么意思的“养5个请求随时活着”吗?除了提出请求之外,为什么你会有要求无缘无故提出请求? – gforce301

+0

@ gforce301我同意它的措辞很奇怪,但我认为他们的意思是,如果他们有请求1-10,只有5个执行一次,所以如果请求1已完成,但2-5仍在运行仅呼叫请求6. – George

+0

给定一个请求10个网址列表,我必须提出10个请求,对不对?但我想同时做5个,如果其中一个完成另一个网址并提出请求。 – mart

回答

1

不知道为什么你需要做到这一点,但在这里你去:

var urls = [ 
 
     'https://jsonplaceholder.typicode.com/photos?albumId=1', 
 
     'https://jsonplaceholder.typicode.com/photos?albumId=2', 
 
     'https://jsonplaceholder.typicode.com/photos?albumId=3', 
 
     'https://jsonplaceholder.typicode.com/photos?albumId=4', 
 
     'https://jsonplaceholder.typicode.com/photos?albumId=5', 
 
     'https://jsonplaceholder.typicode.com/photos?albumId=6', 
 
     'https://jsonplaceholder.typicode.com/photos?albumId=7', 
 
     'https://jsonplaceholder.typicode.com/photos?albumId=8', 
 
     'https://jsonplaceholder.typicode.com/photos?albumId=9', 
 
     'https://jsonplaceholder.typicode.com/photos?albumId=10' 
 
    ], 
 
    running = 0; 
 

 

 

 
function startNext() { 
 

 
    if(running < 5 && urls.length) { 
 
     var url = urls.shift(); 
 

 
     $.ajax({ 
 
      url: url, 
 
      method: 'GET', 
 

 
      complete: function(xhr, status) { 
 
       console.log('completing request for:', url); 
 
       running--; 
 
      } 
 
     }); 
 

 
     console.log('number of requests running:', running); 
 
     console.log('starting request for:', url); 
 
     running++; 
 
    } 
 

 
    urls.length && setTimeout(function() { 
 
     startNext(); 
 
    }, 0); 
 
} 
 

 
startNext();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>