2010-04-18 5 views
0
$(".delete").click(
    function() { 
     var thesender = this; 
     $(thesender).text("Del..."); 
     $.getJSON("ajax.php", {}, 
      function(data) { 
       if (data["result"]) 
        $(thesender).remove(); // variable defined outside 
       else 
        alert('Error!'); 
      } 
     ); 

     return false; 
    } 
); 

Cela peut causer des problèmes si l'utilisateur clique sur un autre ".delete" avant que le rappel ajax soit appelé?variable de portée de fonction anonyme [js, ajax]

Répondre

2

Il lancera une autre requête ajax en même temps en faisant la même chose. Que cela cause des problèmes ou non dépend du côté serveur des choses.

Typiquement, vous supprimez un ID ou une clé de quelque sorte ... Je suppose que plus tard dans ce code, vous serez, mais pour l'instant, il émet juste une autre suppression et appel à ajax.php ... ce que le résultat est dépend entièrement de cette page PHP.

Le rappel se produit pour que demande ajax lorsque que demande ajax termine, chaque demande indépendante à cet égard, de sorte que chaque rappel est traité individuellement. thesender est à l'intérieur de votre clôture actuelle, elle est donc unique pour chaque requête et son rappel respectif.

1

Chaque fois que le gestionnaire click est appelé, une fermeture distincte est créée, de sorte que chaque rappel AJAX aura une référence à la variable correcte.

Par conséquent, vous n'avez pas à vous en préoccuper. (En supposant que le serveur peut gérer les demandes)

1

Il déclenchera un autre événement. Vous pouvez utiliser one plutôt que de cliquer si vous souhaitez que l'événement se déclenche une seule fois. Alternativement, vous pouvez suivre si une requête AJAX est en cours; en utilisant par exemple data comme suit:

$('.delete').click(function() { 
    if ($(this).data('inProgress')) { 
    // Request in progress; cancel? 
    return; 
    } else { 
    $(this).data('inProgress', true); 
    }; 
}); 

Vous pouvez également réaliser la même chose en utilisant une variable globale, l'ajout de classes, etc.

+0

Merci pour la pointe d'une fonction ^^ – arthurprs