Javascript/jQuery ajax调用同步的常用实践

Common practices for Javascript/jQuery ajax call synchronization

本文关键字:常用实 同步 调用 jQuery ajax Javascript      更新时间:2023-09-26

我很好奇这是否被认为是一种好的做法,或者什么可能更好。例如,我必须在一行中进行两个或多个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);                          
                },          
            }); 
 }

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

我使用after实现此功能

$(document).ready(function() {
   var proceed = function() { ... },
       next = after(2, proceed);
   goAjax('arg0', function(data) {
       next(); 
   }); 
   goAjax('arg1', function(data) {
       next();
   }); 
}