2013-10-15 3 views
1

sur le changement de boîte de sélection dans le panneau modal. Je lance une requête ajax et le chargement des données du panneau modal dépend de la réponse.éviter les liaisons multiples ajax

Je vois d'abord qu'une seule requête est en cours à la première tentative. mais il continue à augmenter avec le nombre de fois avec l'option de sélection.

ci-dessous est mon script

$(".dds").msDropDown(); 
$('#dropdown').off('change'); 
$('#dropdown').on('change', takeAction); 

function takeAction(event){ 
event.preventDefault(); 
var colour = $('#colors .selected').attr('data-color'); 
console.log(colour); 
new Ajaxinator().jsonPost({ 
    url :$(event.currentTarget).val(), 
    data : { 
     name : $(event.currentTarget).attr('title'), 
     colour : colour 
    }, 
    success: function (response) 
    { 
    $('#dropdown').off('change'); 

    $('#Data').html(response.Data); 
    $('#dropdown').off('change',takeAction); 

} 
}); 

}; 

Je pense que cela est dû à chaque demande ajax la nouvelle liaison est crée pour #dropdown et onchange fonction appelle plusieurs fois. Quelqu'un peut m'aider.

+0

Je ne sais pas exactement quel est le problème ... votre code actuel indique au navigateur d'appeler la fonction 'takeAction()' chaque fois que la liste déroulante change (c'est-à-dire qu'une nouvelle option est sélectionnée). N'est-ce pas ce que tu veux? Ou y a-t-il un autre problème? –

+0

mais ces fonctions appellent plusieurs fois .. d'abord quand je change la liste déroulante elle appelle seulement une fois ce qui est bien .. quand je change encore la liste déroulante cette fonction appelant deux fois ... et il continue à augmenter – sree

+0

Hmmm, de ce que je peux voir, cela ne devrait pas arriver ... peut-être le problème est dans le HTML ou une autre partie du Javascript? Aussi, qu'est-ce que .msDropDown()? Est-ce une liste déroulante personnalisée? Peut-être que le problème est avec ça. –

Répondre

0

Pourriez-vous essayer?

var oAJAXRequest = false; //GLOBAL VARIABLE 

$("#dropdown").unbind('change'); 
$("#dropdown").bind('change', takeAction); 


function takeAction(){ 

    if(oAJAXRequest != false){ 
     return; 
    } 

    event.preventDefault(); 
    var colour = $('#colors .selected').attr('data-color'); 
    oAJAXRequest = $.ajax({ 
     type: 'POST', 
     url: $(event.currentTarget).val(), 
     data : { 
      name : $(event.currentTarget).attr('title'), 
      colour : colour 
     }, 
     success: function(data) { 
      $('#Data').html(response.Data); 
      oAJAXRequest = false; 
     }, 
     error: function(jqXHR, sMessage, oException) { 
      oAJAXRequest = false; 
     } 
    }); 
} 
+0

changé oAJAXRequest à true.then je ne travaille pour la première liste déroulante change..from prochaine fois que je change le menu déroulant pour une autre valeur, il est tout simplement appeler le retour – sree

0

J'utilisé

$('#dropdown').off('change',takeAction); 

a marché pour moi.

+0

S'il vous plaît utiliser le lien modifier votre question d'ajouter des informations supplémentaires. Le bouton Post-réponse ne doit être utilisé que pour les réponses complètes à la question. – djot

+0

djot, je veux répondre à ma question et j'ai répondu dans la section des réponses – sree

Questions connexes