Bonjour, j'ai 2 appels ajax dans mon script, j'ai besoin qu'ils fonctionnent asynchrone pour gagner du temps, mais j'ai besoin de la seconde pour attendre que le premier soit terminé.
$.ajax({
type: "POST",
url: "getText.asmx/ws_getText",
data: parO1,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
alert(msg.d.data);
}
, error: function () {
chyba("chyba v požadavku", "df");
}
});
if (parO2.length > 0) {
$.ajax({
type: "POST",
url: "getText.asmx/ws_getText",
data: parO2,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
/*WAIT UNTIL THE FIRST CALL IS FINISHED AND THAN DO SOMETHING*/
}
, error: function () {
chyba("chyba v požadavku", "df");
}
});
Alors des idées? Merci
Si vous utilisez jQuery 1.5+, vous pouvez utiliser jQuery.when()
pour accomplir cela. Quelque chose comme (abrégé les appels ajax à la brièveté, il suffit de passer les objets comme vous le faites ci-dessus)
$.when($.ajax("getText.asmx/ws_getText"),
$.ajax("getText.asmx/ws_getText")).done(function(a1, a2){
// a1 and a2 are arguments resolved for the
// first and second ajax requests, respectively
var jqXHR = a1[2]; // arguments are [ "success", statusText, jqXHR ]
});
Vous ne savez pas dans quel ordre ils renverront, donc si vous le faites à la main, vous devrez vérifier l'état de l'autre demande et attendre son retour.
En utilisant jquery
$.ajax({
type: "POST",
async:false, // ** CHANGED **
url: "getText.asmx/ws_getText",
data: parO1,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
alert(msg.d.data);
}
, error: function () {
chyba("chyba v požadavku", "df");
}
});
Vous devez câbler le deuxième appel pour qu'il soit contenu dans le rappel de votre premier appel ajax. Ainsi:
success: function(msg)
{
alert(msg.d.data);
if(par02.length > 0)
{
// Your 2nd ajax call
}
},
Comme JavaScript ne s'exécute pas dans plusieurs threads du client, vous ne pouvez pas bloquer le thread tant que certaines conditions ne sont pas remplies.
Voici une autre réponse sur l'exécution de requêtes dual ajax. Comme Tejs, l'utilisateur passe un appel ajax dans la méthode de réussite ...
L'affiche indique qu'il est préférable que la méthode de succès lance une nouvelle demande ajax .. "