Ajax "async: false" et bug sur Chrome / Safari

Ajax "async: false" et bug sur Chrome / Safari - HTML/CSS - Programmation

Marsh Posté le 25-02-2014 à 14:30:42    

Bonjour tout le monde,
 
Soit le code basic utilisant Ajax suivant :
 

Code :
  1. var cpt;
  2. for (cpt = 0; cpt < 20; cpt++)
  3. {
  4.   $.ajax({
  5.             url: 'exec_actions.php',
  6.     type: 'POST',
  7.     data: {var_4_treatment: cpt},
  8.     success: function(response)
  9.     {
  10.  document.getElementById('text_field').value = 'kikou ' + cpt;
  11.             }
  12.     async: false
  13.   });
  14. }


 
Le champ avec l'id text_field n'est pas mis à jour... Le fait d'appeler Ajax avec async à false empêche le rafraichissement le tout élément graphique dans le navigateur.
Cela est vrai dans Chrome et Safari. Dans Firefox par contre, le "bug" n'est pas présent et cela fonctionne.
 
J'ai cherché un peu partout sur internet et la réponse est systématiquement la même : problème connu, le aysnc: false est le mal blablabla...
 
Dommage, car pour faire des progress bars qui sont réellement à jour pour par exemple "loader" plusieurs fichiers, c'est pas bien pratique.... (C'est le moins qu'on puisse dire)  
 
Alors vous allez me dire : c'est possible avec async à true et tel ou tel contournement crade... Merci, je les connais déjá, je sais comment faire. C'est pas l'objet de ce topic.
 
L'objet de ce topic est de savoir si REELLEMENT il n'existe aucune solution avec async: false sur Chrome et Safari.
 
Merci


---------------
Expert en expertises
Reply

Marsh Posté le 25-02-2014 à 14:30:42   

Reply

Marsh Posté le 25-02-2014 à 22:19:00    

Je vois pas pourquoi tu veux faire du chargement synchrone en Ajax,
Tu pourrais très bien gérer le chargement de plusieurs contenus sans faire une boucle, il suffit simplement que ta méthode se rappelle elle même.

 
Code :
  1. function load(cpt, max, cb) {
  2.    $.ajax({
  3.        url: 'exec_actions.php',
  4.        type: 'POST',
  5.        data: {var_4_treatment: cpt},
  6.        success: function(response)
  7.        {
  8.             document.getElementById('text_field').value = 'kikou ' + cpt;
  9.             if(cpt<max) load(cpt++, max, cb);
  10.             else {
  11.                  if(cb) cb();
  12.              }
  13.         }
  14.        async: true
  15.   });
  16. }
  17. load(0,20, function() {
  18.    console.log("Ayait tout fini" );
  19. });
 

de l'Ajax synchrone c'est de la merde et c'est le mal, et avec ce bout de code tout con, je viens de te montrer que c'est pas compliqué et que tu peux faire des trucs encore plus sexy.

 

il existe en plus pleins de méthodes avec jquery qui te permettent de rendre ça plus sexy.
Le queue, promise and co....

 

Et tu auras la même réponse partout où tu vas, car à partir du moment où tu fais un appel synchrone dans ton navigateur, tout le code est bloqué, idem pour le browser, car sinon ça fait un blocage dégueulasse.
Et essaye de charger un fichier de 5Mo en ajax et reviens nous voir pour dire si le bug ne marche pas sous Firefox :)


Message édité par gatsu35 le 25-02-2014 à 22:22:24

---------------
Blablaté par Harko
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed