2017-09-14 6 views
2

La liste déroulante que j'ai sur la page est remplie à partir d'un appel AJAX via ce qui suit. Ce qui ne fonctionne pas, c'est que je dois exécuter du code supplémentaire juste après l'invocation de la méthode callback(), mais cela ne se poursuit jamais dans le reste du rappel. Par exemple, ce qui suit dans le rappel de succès ne fonctionne pas le code supplémentaire identifié:Selectize Ajax Callbacks

var $ddl = $("#ContactID"); 
var control = $ddl[0].selectize; 

control.load(function() { 
    $.ajax({ 
     url: "validURL", 
     type: "post", 
     dataType: "json", 
     data: { 
     id: recordID 
     }, 
     error: function() { 
     alert("Error retrieving data"); 
     callback(); 
     }, 
     success: function (result) { 
     callback(result.data); 
     //Does not get called below 
     loadAdditionalInformation(recordID); 
     } 
    }); 
}); 

Cependant, si je le fais, cela fonctionne:

success: function (result) { 
     window.setTimeout(function() { 
      callback(result.data); 
     }, 0); 

     loadAdditionalInformation(recordID); 
} 

Je dois appeler une méthode à la pointez la liste est chargée, donc je ne suis pas sûr que je veux continuer avec cela, alors pourquoi le callback de succès abandonner après l'appel de méthode callback().

+0

cela n'a pas de sens. timeout 0 fait la fonction interne asynchrone donc seule explication est erreur/boucle infinie pendant la fonction de rappel .. C'est une question stupide, mais avez-vous vérifié la console? – bigless

+0

@bigless C'est une très bonne question et Zamrony avait raison, j'ai oublié un paramètre, donc j'avais affaire à un indéfini, mais il a été avalé pour une raison quelconque, je ne sais pas pourquoi. Encore une fois, je ne proposais pas 'setTimeout' comme réponse, mais quelque chose que j'ai remarqué et essayé ... –

Répondre

0

load attend deux paramètres, query et callback.

$('#ContactID').selectize({ 
     .... 
     load : function (query, callback) { 
     $.ajax({ 
      .... 
      success : function(res) { 
        callback(res.data); 
        doOtherThings(res); 
      } 
     }); 
     } 
}); 

Votre code ne passe aucun de ces paramètres, il est donc très probablement pas que lorsque success() est appelée, la fonction callback() est définie. Je suggère de mettre le point d'arrêt et de l'inspecter.