Javascript 处理多个并行ajax请求的响应

Javascript 处理多个并行ajax请求的响应,javascript,jquery,Javascript,Jquery,我有4个针对我的服务(jsonp)的并行jQueryAjax请求,在数据从服务返回并需要显示给用户之前,一切正常。我无法处理响应,因为它们都以几毫秒的间隔到达,并且它们调用相同的jsonp回调方法 我想做的是在每个ajax请求完成其工作时更新数据框 代码示例: $.ajax({ url: 'http://link/service?source=1', dataType: 'jsonp', jsonp: 'callback', jsonpCallback: 'asyncPr

我有4个针对我的服务(jsonp)的并行jQueryAjax请求,在数据从服务返回并需要显示给用户之前,一切正常。我无法处理响应,因为它们都以几毫秒的间隔到达,并且它们调用相同的jsonp回调方法

我想做的是在每个ajax请求完成其工作时更新数据框

代码示例:

$.ajax({
   url: 'http://link/service?source=1',
   dataType: 'jsonp',
   jsonp: 'callback',
   jsonpCallback: 'asyncPrint'
   complete: function(data) {
      console.log("completed");
   }
});

$.ajax({
   url: 'http://link/service?source=2',
   dataType: 'jsonp',
   jsonp: 'callback',
   jsonpCallback: 'asyncPrint'
   complete: function(data) {
      console.log("completed");
   }
});

$.ajax({
   url: 'http://link/service?source=3',
   dataType: 'jsonp',
   jsonp: 'callback',
   jsonpCallback: 'asyncPrint'
   complete: function(data) {
      console.log("completed");
   }
});

$.ajax({
   url: 'http://link/service?source=4',
   dataType: 'jsonp',
   jsonp: 'callback',
   jsonpCallback: 'asyncPrint'
   complete: function(data) {
      console.log("completed");
   }
});
在另一个文件中,我实现了asyncPrint方法:

function asyncPrint(data) {
   if(data == undefined) return;

   //Populate sourceMedia with data from all sources
   sourceMedia[data.list[0].source] = data;

   //Do something with arrived data
   goThroughArrivedData(data);
}
附言。
我尝试过使用$.when(),但它会等待所有ajax请求完成,这是不可接受的,因为其中一个ajax调用可能需要30秒以上。

由于它们都以几毫秒的间隔到达,这就是我被卡住的地方。这是怎么一个问题?所有4个请求都是同时执行的,而3个请求的执行时间几乎相同(约900毫秒)。。。我认为这可能是一个问题,因为所有3个ajax调用都试图同时访问同一个JS方法。这应该不是一个问题。因为在流程流的某个点,您将遇到函数调用被阻塞,因此后续执行将等待该调用完成。这意味着,例如,如果您将dom元素添加到一个公共父级,它们将很好地插入。可能是以一种不可预测的方式,但肯定会添加。好的,我已经为每个ajax请求分配了一个唯一的回调方法名,在这些方法中,我封装了执行的主方法(asyncPrint(data))。。。jQuery似乎将jsonp回调放在回调数组中,在回调调用时,它将其从回调列表中删除(因为它是执行的),在我的例子中,由于回调方法丢失,导致其他ajax请求失败。我还没有深入研究jQuery,但这听起来像是合理的jQuery执行流程。谢谢@Yoshi的回复。因为它们都是在几毫秒的时间间隔内到达的,所以这就是我受挫的地方。这是怎么一个问题?所有4个请求都是同时执行的,而3个请求的执行时间几乎相同(约900毫秒)。。。我认为这可能是一个问题,因为所有3个ajax调用都试图同时访问同一个JS方法。这应该不是一个问题。因为在流程流的某个点,您将遇到函数调用被阻塞,因此后续执行将等待该调用完成。这意味着,例如,如果您将dom元素添加到一个公共父级,它们将很好地插入。可能是以一种不可预测的方式,但肯定会添加。好的,我已经为每个ajax请求分配了一个唯一的回调方法名,在这些方法中,我封装了执行的主方法(asyncPrint(data))。。。jQuery似乎将jsonp回调放在回调数组中,在回调调用时,它将其从回调列表中删除(因为它是执行的),在我的例子中,由于回调方法丢失,导致其他ajax请求失败。我还没有深入研究jQuery,但这听起来像是合理的jQuery执行流程。谢谢@Yoshi的回复。