2012-02-13 3 views
0
function foo(arg, ajaxcomplete) { 
    $.ajax({ 
    //ajaxcall... 
    success: function() { 
     //set ajaxcomplete to true 
    } 
} 

Y at-il un moyen de faire quelque chose de similaire à savoir quand un ajaxcall a terminé dans une fonction? MerciFonction de sortie Javascript

+0

Pourquoi ne pas faire exactement ce que vous devez faire en cas de succès dans le callback «succès»? Vous pourriez même passer une fonction pour être appelé au succès. IMO, en définissant un indicateur sur le succès à notifier lorsque l'AJAX est terminée va à l'encontre du modèle de rappel que vous utilisez. – FishBasketGordo

+0

Pouvez-vous clarifier? Peut-être inclure un certain code décrivant le genre de chose que vous voulez faire –

Répondre

1

Oui complete. il est déclenché après les rappels d'erreur ou de succès.

function foo(arg, ajaxcomplete) { 
     $.ajax({ 
      success: function() { 
       alert('O.K.'); 
      }, 
      complete: function(){ 
       alert('We are done'); 
      } 
     }); 
    } 

Description dans le docs:

complète (jqXHR, textStatus) Fonction, Array Une fonction à appeler lorsque les finitions de demande (après callbacks de succès et d'erreur sont exécutés). La fonction reçoit deux arguments: L'objet jqXHR (dans jQuery 1.4.x, XMLHTTPRequest) et une chaîne catégorisant l'état de la requête ("success", "notmodified", "error", "timeout", "abort", ou "parsererreur"). À partir de jQuery 1.5, le paramètre complet peut accepter un ensemble de fonctions. Chaque fonction sera appelée à son tour. Ceci est un événement Ajax.

+0

Le problème majeur avec votre solution est qu'elle ne répond pas du tout au problème. $ .ajax() étant asynchrone, la méthode Foo() a (très très très probablement) déjà été retournée et il est donc trop tard pour définir la valeur du paramètre "ajaxcomplete" - soit en cas de succès ou de rappel complet. –

+0

@DidierGhys. Il a juste besoin de déplacer son code vers le rappel complet. – gdoron

+1

@downvoter. Pourquoi avez-vous voté toutes les réponses ici? – gdoron

1

La fonction success() est toujours la méthode pour savoir que votre appel AJAX est terminé. Même s'il est enveloppé dans une fonction, il se produit toujours de manière asynchrone, et dans votre cas, la fonction foo() sera probablement déjà terminée et retournée avant que la fonction success() ne soit appelée.

+0

le succès ne suffit pas. Lorsqu'une erreur est survenue, elle ne sera pas déclenchée. Vois ma réponse. – gdoron

0

Vous pouvez utiliser l'événement complete pour définir la variable requise car elle est déclenchée, que la requête aboutisse ou échoue.

function foo(arg, ajaxcomplete) { 
    $.ajax({ 
    //ajaxcall... 
    success: function() { 

    }, 
    complete: function(){ 
     //set ajaxcomplete to true here 
    } 
} 
+1

@downvoter - Commentez s'il vous plaît! – ShankarSangoli

+0

Il a déprécié presque toutes les réponses ici. J'ai un mauvais pressentiment c'est l'un des autres propriétaires de réponse ici. – gdoron

+1

Ces personnes devraient être expulsées de SO. – ShankarSangoli

0

Vous pourriez avoir le paramètre ajaxComplete comme un rappel:

function foo(arg, ajaxcomplete) { 
    $.ajax({ 
    //ajaxcall... 
    complete: function() { 
     ajaxcomplete(); 
     // Some other code here if required 
    } 
    } 

que vous pourriez appeler comme ceci:

var isComplete = false; 
foo('someArg', function() { isComplete = true; });