[ajax]Erreur sur multiples HTTPRequest

WhiteDwarf Messages postés 510 Date d'inscription samedi 29 décembre 2001 Statut Membre Dernière intervention 23 mai 2008 - 27 juin 2006 à 02:16
WhiteDwarf Messages postés 510 Date d'inscription samedi 29 décembre 2001 Statut Membre Dernière intervention 23 mai 2008 - 9 oct. 2006 à 14:01
Bonjour, j'ai réalisé un code d'envoie d'email en ajax, mais je me confronte à un problème :

Je récupère en ajax la liste de contact msn d'un utilisateur, à cette liste je rajoute ceux qu'il a voulu rentrer à la main. Jusque la pas de problème

Ensuite j'initie une deuxième session HTTPRequest et avec celle ci, pour chaque email, j'appelle la page php d'envoie d'email. Simplement c'est la que j'ai une erreur :

Error: [Exception... "Component returned failure code: 0xc1f30001 (NS_ERROR_NOT_INITIALIZED) [nsIXMLHttpRequest.send]"  nsresult: "0xc1f30001 (NS_ERROR_NOT_INITIALIZED)"  location: "JS frame :: http://www.thevphone.com/azerty/index.php?page=amis&user=&lang=en :: anonymous :: line 376"  data: no]
Source File: index.php?page=amis&user=&lang=en
Line: 376

Voici la fonction en question :

function valider() {

var msg_erreur;
var msg_test;
msg_erreur = "";
msg_test = "1";
  // si la valeur du champ prenom est non vide
  if(document.formulaire.nom.value == "") {
  msg_erreur = "- <? echo $err_nom; ?> \n";
  }
  if(document.formulaire.nom_utilisateur.value == "") {
  msg_erreur = msg_erreur + "- <? echo $err_username; ?>\n";
  }
  if(document.formulaire.adress_email.value == "") {
  msg_erreur = msg_erreur + "- <? echo $err_mail; ?>\n";
  }
  if(document.formulaire.message.value == "") {
  msg_erreur = msg_erreur + "- <? echo $err_message; ?>\n";
  }
 

  // Affichage d'erreur si il y a sinon HTTPRequest....
 
  if(msg_erreur != "") {
  alert(msg_erreur);
  return false
  }
  else
  {
  // on récupère les emails entrés à la main
    var nbr;
    nbr = 0;
    var email_liste;
    email_liste = "";
    for(yo=0;yo<document.formulaire.liste.length;yo++){
        email_liste = email_liste + document.formulaire.liste.options[yo].value + "|";
        nbr++;
        }   
        // si il n'y a pas d'emails définis à la main et qu'il n'y a pas de login et pass pour compte IM, erreur...
    if (nbr==0 || document.formulaire.username.value=="" || document.formulaire.password.value=="") {
        alert('<? echo $err_num_dest; ?>');
    }
    else
    {
   
    // HTTPRequest en AJAX
  if(document.all) {
    // Internet Explorer
    var obj = new ActiveXObject("Microsoft.XMLHTTP");
}
else {
    // Mozilla
    var obj = new XMLHttpRequest();
}

// On cache le formulaire et on affiche le div de chargement
    DivStatusOff('contenu');
    DivStatusOn('reponse');
   

      var content = document.getElementById('reponse');
    content.innerHTML = "<? echo $amis_title; ?>
<? echo $amis_envoi; ?>

";
   
// On ouvre la connexion au fichier d'import d'emails
    obj.open("POST", 'im_import.php');

    obj.onreadystatechange = function() {        if (obj.readyState 4 && obj.status 200) {
        if (obj.responseText != "") {
            // On récupère tous les emails
            var liste_e_d = obj.responseText ; //Réponse//
            liste_e_d = liste_e_d + email_liste;
            var liste_e_e = liste_e_d.split('|'); //Explode//
            var liste_e_c = liste_e_e.length; //Nombre de rows//
            var liste_e_aff = "";
           

                if(document.all) {
                    // Internet Explorer
                    var obj2 = new ActiveXObject("Microsoft.XMLHTTP");
                }
                else {
                    // Mozilla
                    var obj2 = new XMLHttpRequest();
                }
                obj2.open("POST", 'test_email.php');
               
                var i = 0;
               
                obj2.onreadystatechange = function() {                if (obj2.readyState 4 && obj2.status 200) {
                content.innerHTML = obj2.responseText;
                if (i < (liste_e_c - 1)) {
                i++;
                obj2.send("test="+liste_e_e[i]);
                }
                }
                }
               
               
                obj2.send("test="+liste_e_e[0]);

                }
            }
    }
   
    // Requête sur le fichier d'import de contacts avec login et pass IM
    var data = "";
    obj.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    data = "msp=hotmail&imuser=" + document.formulaire.username.value + "&impass=" + document.formulaire.password.value;
       
    obj.send(data);
   

    }
   
    }
   
}

C'est au niveau du code en gras que ce situe le problème, mais après avoir passé quelques heures sur ce problème j'abandonne et je me remet à votre savoir ^^

Merci d'avance de votre aide...
----------------------
La lumière étant plus rapide que le son, un homme peu paraître brillant avant qu'il se mette a parler
-----------------

2 réponses

rubiks10 Messages postés 224 Date d'inscription lundi 19 décembre 2005 Statut Membre Dernière intervention 6 juin 2007 3
5 oct. 2006 à 15:11
Salut j'ai été confronté au meme probleme et moi je l'ai résolu en effectuant des requetes programmées...

Pour etre plus simple par exemple tu lances chaque requete avec un timer.

Et chaque requete espacée de 100ms voilà après a toi de tester différentes periodes d'espacement...

En espérant que cela te serves...

--The Rubik's Man--
0
WhiteDwarf Messages postés 510 Date d'inscription samedi 29 décembre 2001 Statut Membre Dernière intervention 23 mai 2008
9 oct. 2006 à 14:01
Merci pour le conseil, bien que je ne saches pas utiliser les timers en js, je vais jeter un oeil à tout ca.

@+

----------------------
La lumière étant plus rapide que le son, un homme peu paraître brillant avant qu'il se mette a parler
-----------------
0
Rejoignez-nous