Bonjour à tous,
Supposons le code de cochon suivant :
La boucle a pour but de pré-charger un certain nombre de données. De construire un cache 'data'. (L'environnement technique me contraint à utiliser cette méthode plutôt dégueulasse, impossible de charger toutes les infos en une seule requête par exemple)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 <button id="btn">Click !</button> <div id="content"></div> <script> var data = {}; $(document).ready(function(){ for(var i=1; i<=20; i++){ $.ajax({ type : "GET", url : "data.xml", data : "id="+i, dataType : "text", success : function(text) { data[i] = text; } } } $("#btn").click(function(){ $.ajax({ type : "GET", url : "data2.xml", dataType : "text", success : function(text) { $("#content").html(text); } } }); } </script>
Le bouton doit quand à lui charger une autre requête dans la page.
Nous pouvons tracer le log suivant au chargement de la page :
Lancement AJAX 0
Lancement AJAX 1
Lancement AJAX 2...
... Lancement AJAX 19
Réception AJAX 0
Réception AJAX 1...
...Réception AJAX 19
Le problème réside dans le fait que même si toutes les requêtes sont envoyées quasi simultanément, les retours sont traités un par un et prennent un peu plus de temps, ils sont comme "mis en queue".
Si j'affiche la page et clic immédiatement sur le bouton, j'aimerais que le traitement de la requête associée au bouton soit traitée immédiatement.
Soit :
Lancement AJAX 0
Lancement AJAX 1
Lancement AJAX 2...
... Lancement AJAX 19
Réception AJAX 0
Réception AJAX 1
Click sur Bouton
Réception de Bouton
Réception AJAX 2
Réception AJAX 3...
...Réception AJAX 19
Or j'obtiens
Lancement AJAX 0
Lancement AJAX 1
Lancement AJAX 2...
... Lancement AJAX 19
Réception AJAX 0
Réception AJAX 1
Click sur Bouton
Réception AJAX 2
Réception AJAX 3...
...Réception AJAX 19
Réception de Bouton
Les résultats sont a peu près traités dans l'ordre d'appel.
Les appels sont fait en moins d'1ms, les réceptions des résultats durent environ 6sec. Ma réception de bouton peut être faite après les 20 appels, mais pas après les 20 réceptions.
Des idées ?
Partager