Общие практики для синхронизации вызовов javascript / jQuery ajax - PullRequest
2 голосов
/ 01 октября 2011

Мне любопытно, считается ли это хорошей практикой или что может быть лучше. Скажем, например, я должен сделать два или более вызовов 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 голосов
/ 22 февраля 2012

Я использую after для этой функции

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

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

   goAjax('arg1', function(data) {
       next();
   }); 
}
0 голосов
/ 22 февраля 2012

Я не вижу проблем с тем, что вы делаете, хотя я бы предпочел объединить эти два запроса вместе.Под пакетной обработкой я подразумеваю объединить его в один вызов и на сервере, который обрабатывает запрос, выполнить два вызова службы, которые в противном случае были бы вызваны отдельно, а затем обработать их в одном обратном вызове.Необходимость ждать завершения этих двух вызовов в javascript сводит на нет всю цель сделать их асинхронными (ajax) вызовами.Эти два вызова, вероятно, вызываются по отдельности в некоторых случаях, но не повредит добавить некоторый механизм в ваш javascript и сервис для обработки нескольких запросов за один вызов, например, когда это применимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...