Depuis les appels AJAX sont asynchrones par défaut, vous devez déplacer votre affectation de valeur pour exécuter après le code qui renseigne votre select
. Sinon, l'affectation de valeur se produit avant que la réponse ne revienne.
Je suppose que tout code remplit le select
est configuré pour exécuter après la réponse est reçue. Donc placer votre sélection de valeur après ce code devrait résoudre le problème.
(En d'autres termes, il ira à l'intérieur la fonction populateOptions()
.)
Au-delà, il est difficile d'offrir une solution sans voir votre code.
EDIT: Voici quelques exemples de la façon dont cela pourrait fonctionner. N'importe lequel d'entre eux sera mieux que le réglage async: false
dans la demande.
Vous pouvez placer le code qui doit attendre la réponse à l'intérieur de le rappel success:
.
function populateOptions() {
$.ajax({
url: "some/path",
success: function(resp) {
// Place ANY code that needs to wait for the response in here.
// This way it will not run until the successful response is received.
}
});
}
Ou vous pouvez placer le code qui doit attendre la réponse dans une autre fonction, et appeler cette fonction à l'intérieur du rappel success:
.
function populateOptions() {
$.ajax({
url: "some/path",
success: function(resp) {
// Call this function when the successful response is received.
successFunction(resp);
}
});
}
function successFunction(resp) {
// Place ANY code that needs to wait for the response in here.
}
Ou, disent si populateOptions()
devraient être utilisées de différentes façons, si vous avez besoin d'un rappel différent, vous pouvez passer une fonction d'une autre fonction qui sera appelée dans la fonction de rappel success:
.
function myMethod() {
// Send a function as an argument when you call populateOptions()
populateOptions(function(resp){alert(resp);});
// Code that does NOT need to wait can still go here
}
function populateOptions(callback_fn) { // Receive the function that was sent
$.ajax({
url: "some/path",
success: function(resp) {
// Call the function that was sent
callback_fn(resp);
}
});
}
Ou prendre le même exemple que ci-dessus, vous pouvez réellement utiliser la fonction que vous avez passé dans comme le rappel success:
.
function myMethod() {
// Send a function as an argument when you call populateOptions()
populateOptions(function(resp){alert(resp);});
// Code that does NOT need to wait can still go here
}
function populateOptions(callback_fn) { // Receive the function that was sent
$.ajax({
url: "some/path",
success: callback_fn(resp) // Now the function passed is the callback
});
}
Veuillez poster le code AJAX. – joshperry