Ajax - xmlhttprequest - Problème pour lancer deux fonctions

Ajax - xmlhttprequest - Problème pour lancer deux fonctions - Javascript/Node.js - Programmation

Marsh Posté le 02-02-2016 à 20:39:56    

Bonjour tout le monde,
 
Avant de balancer bêtement mon code et attendre que quelqu'un fasse le debug, je viens vous voir avant tout pour m'aider à trouver des pistes à mon problème. Je vous l'explique en quelques mots.
 
A l'heure actuelle, j'ai une fonction A utilisant xmlhttprequest pour mettre à jour le <div id="A"> de ma page. Si je fais un appelle de cette fonction, elle fonctionne parfaitement bien et rempli sa mission.  
 
Maintenant, j'ai une autre fonction B utilisant également xmlhttprequest pour mettre à jour le <div id="B">. Là encore, si j'appelle cette fonction, elle fonctionne très bien et rempli le bon <div>.
 
Où cela pose problème, c'est lorsque j'appelle ma fonction A suivi de ma fonction B. Ma fonction A va remplir le <div id="A">, ma fonction B va remplir le <div id="B">. Mais au final, le <div id="A"> s'efface.  
 
Je me suis dit qu'il y avait peut être un problème dans l'une de mes fonctions lorsque je récris mon <div>. Style je prends le mauvais ID mais non. J'ai essayé également d'inverser l'appel des fonctions. Le problème est toujours existant par contre il s'inverse également.  
 
Auriez-vous une idée de quoi cela pourrait provenir?  
 
Un grand merci d'avance

Reply

Marsh Posté le 02-02-2016 à 20:39:56   

Reply

Marsh Posté le 02-02-2016 à 21:45:55    

Bonjour,
 
Tu as bien 2 fonctions différentes A et B? Ce n'est pas un appel de la même fonction mais avec des paramètres différents?
Comment tu remplies tes div? AppendChild?


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 02-02-2016 à 21:59:33    

Non non... c'est bien deux fonctions différentes.
 

Code :
  1. $(function(){
  2.         var path = "../../documents/main/";
  3.         RefreshNews(path+'News/');
  4.         RefreshDoc(path+'DocMain/');
  5. });


 
Pour remplir mon div, je procède la façon suivante.  
 

Code :
  1. xhr.onreadystatechange = function(){
  2.             // Test si tout est ok pour faire le nécessaire
  3.             if(xhr.readyState == 4 && xhr.status == 200){
  4.                     leselect = xhr.responseText;
  5.                     $("#DropNews" ).html(leselect);
  6.             }
  7.   document.body.style.cursor='default';
  8.     }


 
bien entendu  le $("DropNews" ) devient $("#DropDoc" ) dans l'autre fonction. Et au début de chaque fonction, je déclare xhr
 

Code :
  1. if(window.XMLHttpRequest){ // Firefox et autres
  2.    xhr = new XMLHttpRequest();
  3. }
  4. else if(window.ActiveXObject){ // Internet Explorer  
  5.    try {
  6.                 xhr = new ActiveXObject("Msxml2.XMLHTTP" );
  7.             } catch (e) {
  8.                 xhr = new ActiveXObject("Microsoft.XMLHTTP" );         
  9.             }
  10. }
  11. else { // XMLHttpRequest non supporté par le navigateur  
  12.    alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest!" );
  13.    xhr = false;
  14. }


Reply

Marsh Posté le 02-02-2016 à 22:47:32    

Pour information, l'objet ajax existe en jQuery, non parce que je trouve ça bizarre de mélanger du jquery avec du js classique.
 
Ton problème se situe surement au niveau de la portée de tes variables et/ou de comment sont appelées tes fonctions.
Déclarer localement tes objets xmlHttpRequest peut peut-être régler le problème mais vu son fonctionnement je n'en suis pas certain, créer des objets avec des noms différents permettra d'écarter définitivement le problème de portée des variables.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 03-02-2016 à 20:00:29    

Merci beaucoup :)  
 
Du coup j'ai réécrit mes fonctions en utilisant que jquery avec l'objet ajax et du coup, ça fonctionne plutôt bien.
 
Je dois juste corriger maintenant un autre petit bug qui est survenu mais je dois juste trouver du coup quand bien appeler ma fonction


Message édité par kishibojin le 03-02-2016 à 20:01:09
Reply

Sujets relatifs:

Leave a Replay

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