[AJAX] Fonctionnement synchrone et envoi type POST sous IE

Fonctionnement synchrone et envoi type POST sous IE [AJAX] - HTML/CSS - Programmation

Marsh Posté le 25-06-2008 à 15:49:15    

Bonjour
 
Je me heurte à un soucis lors du appel AJAX en mode synchrone avec passage de paramètre POST.
 
en fait j'utilise une fonction à qui je demande de m'envoyer le contenu d'un formulaire vers un script php..
qui me retourne si tout c'est bien passé ou pas.
 
en mode asynchrone pas de soucis, sauf que j'ai besoin de savoir quand le script a fait son boulot pour rafraichir la page ect..
 
en mode synchrone sous IE j'ai un soucis

Code :
  1. xhr.open('POST', url, bAsync);
  2.       DebugPHP(onState4 , "makePOSTRequest après xhr.open", 2);
  3.       xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded" );
  4.       DebugPHP(onState4 , "makePOSTRequest après xhr.setRequestHeader 1", 2);
  5.       xhr.setRequestHeader("Content-length", parameters.length);
  6.       DebugPHP(onState4 , "makePOSTRequest après xhr.setRequestHeader 2", 2);
  7.       xhr.setRequestHeader("Connection", "close" );
  8.       DebugPHP(onState4 , "makePOSTRequest après xhr.setRequestHeader 3", 2);
  9.       xhr.send(parameters);
  10.       DebugPHP(onState4 , "makePOSTRequest après xhr.send", 2);


lors du xhr.send(parameters); javascript met 15 seconde avant de rendre la main!
alors que le script déja reçu et traité l'information !
 
évidemement lorsque je met xhr.send en commentaire la fonction retourne immédiatement mais rien est envoyé au script.
 
Si quelqu'un peut m'aiguiller un peu !
 
 
 

Reply

Marsh Posté le 25-06-2008 à 15:49:15   

Reply

Marsh Posté le 25-06-2008 à 16:03:25    

Laisse tomber le mode synchrone, c'est de la merde.
 
Imagine ton serveur web prends plus de temps que d'habitude, l'interface du navigateur va se figer le temps de recevoir la réponse. D'un point de vue ergonomique c'est une horreur.
 
Envoie en asynchrone, et vérifie dans le callback si tout c'est bien passé. Normallement, ça va être traité en quelques milli-secondes, donc l'utilisateur n'aura pas le temps de faire quoi que ce soit. Au pire tu peux vérouiller ton formulaire.
 
Bref, le truc que tout le monde fait à part toi.

Reply

Marsh Posté le 25-06-2008 à 16:09:08    

lol :D
 
.. en fait j'ai un callback assez minimaliste dans ce cas précis ..
dans le cas d'une gestion en assynchrone il faut que j'avise l'utilisateur que sa requette est en cours ..  
si il clique sur enregistrer et que rien ne se passe dans la seconde (serveur qui prend un peu de temps) il va recliquer ou je ne sais quoi :/
 
je vais essayer d'afficher un message par dessus mon interface à la gmail et gerer en asyncrhone comme pour le reste.
 
Merci.

Reply

Marsh Posté le 25-06-2008 à 22:13:50    

Ou tout simplement grise le bouton (propriété "disabled" en DOM). En réactive le lorsque tu reçoies la réponse.
 
Je me rappelle un jour avoir utilisé le mode synchrone dans une de mes applis par erreur. Ouah, j'avais l'impression que l'enfer c'était déchainé sur ma machine tellement il y avait de trucs qui ne marchait plus. Des heures de debug pour trouver que c'était ce foutu paramètre qui foutait la merde   :sweat:

Reply

Marsh Posté le 18-07-2008 à 12:18:19    

Au final je suis repassé en asynchrone:
 
avant l'envoi je met un calque avec un message d'attente:
avantage l'utilisateur ne peut plus cliquer car c'est le calque d'attente qui prend les évenement
avantage2: si jamais ça prendre trop de temps il peut faire un refresh de la page.
 
ensuite quand la réponse est effectuée j'enleve le calque et je continue :)
 
Merci

Reply

Sujets relatifs:

Leave a Replay

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