Javascript / jQuery ajax调用同步的常见做法

时间:2011-10-01 00:33:57

标签: javascript jquery ajax concurrency semaphore

我很好奇这是否被视为良好做法或更好的做法。比方说,我必须连续进行两次或多次ajax调用,然后等待所有人完成再继续。同样在这种情况下,我使用JSONP来调用单独端口上的服务(相同的源策略)。

$(document).ready(function() {

   var semaphore = 0; 

   var proceed = function() { ... }; 

   goAjax('arg0', function(data) {

       semaphore++;
       checkStatus(semaphore, proceed);  
   }); 

   goAjax('arg1', function(data) {

       semaphore++;
       checkStatus(semaphore, proceed); 
   }); 

}

function checkStatus(sem, callback)
{
    if (sem == 2)
    {
        callback(); 
    }
}

function goAjax(args, callback) {

    $.ajax({
                ...

                dataType: "jsonp",
                success: function(data) {
                                callback(data);                          
                },          
            }); 
 }

2 个答案:

答案 0 :(得分:0)

虽然我更愿意将这两个请求一起批处理,但我没有看到你正在做什么的问题。通过批处理,我的意思是将其合并为一个调用,并在处理请求的服务器中,进行两个服务调用,否则将单独调用,然后在一个回调中处理它。必须等待在javascript中完成这两个调用才能完成使它们成为异步(ajax)调用的全部目的。在某些情况下,这两个调用可能是单独调用的,但是在javascript和服务中添加一些机制以在一次调用中处理多个请求并没有什么坏处,例如它适用的情况。

答案 1 :(得分:0)

我使用after来实现此功能

$(document).ready(function() {
   var proceed = function() { ... },
       next = after(2, proceed);

   goAjax('arg0', function(data) {
       next(); 
   }); 

   goAjax('arg1', function(data) {
       next();
   }); 
}