xmlhttprequest : ca veut pas OPEN

WRInaute discret
Hello,

J'essaye pour la première fois à me mettre au fameux objet xmlhttprequest. Le problème c'est que le script bloc quand je lance la méthode OPEN (les alertes qui suivent ne s'affichent pas...).

Le but du code ci-dessous est de lancer un script qui se trouve sur un autre serveur (mon site étant dispatché entre plusieurs serveurs :/)

Code:
// Fonction d'envoi de la requette http via l'objet XMLHttpRequest
function getHTTPObject() {
  var xmlhttp;
  /*@cc_on
  @if (@_jscript_version >= 5)
    try {
      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e) {
      try {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (E) {
        xmlhttp = false;
        }
      }
  @else
  xmlhttp = false;
  @end @*/
  if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
    try {
      xmlhttp = new XMLHttpRequest();
      } catch (e) {
      xmlhttp = false;
      }
	  alert('gethttp');
  }
  return xmlhttp;
  }


// Handle traitant le resultat de la requette.

function handleHttpResponse() {

	if (http.readyState == 4) {

		//alert (http.responseText);
		document.getElementById('reponse').innerHTML=http.responseText;

	} 
	else
    {
	document.getElementById('reponse').innerHTML="en cours";
    } 

}


// Creation d'un objet httpRequest en memoire.
var http = getHTTPObject();
if (!http) {
	alert('http not ok');
}
var url = "http://ipserveur2/scriptexterne.php";

alert(http.status); // affiche 0, logique
http.open("GET", url, true);
//a partir d'ici rien ne s'execute
alert(http.status);

http.onreadystatechange = handleHttpResponse;
http.send(null);
alert('ici');

Vous voyez l'erreur ? merci !

(je fais mes tests sur Firefox)
 
WRInaute accro
avec 3 commentaires dans ton code, ça donne pas vraiment envie d'aider...
Mais bon moi je peux pas t'aider en même temps je suis pas experts en AJAX ^^
 
Nouveau WRInaute
XMLHttpRequest ne permet pas de faire des appels d'URL en dehors du domaine courant.
Je n'ai pas testé ton code, mais apparemment tu appelles une URL sur une IP distante ? Je te conseille de faire d'abord tes tests sur une URL locale, et de voir ce que ça donne. Si ça marche il te faudra ensuite un mini proxy (en php par exemple), qui se chargera d'aller lire l'URL distante.
 
WRInaute discret
proteus a dit:
XMLHttpRequest ne permet pas de faire des appels d'URL en dehors du domaine courant.
Je n'ai pas testé ton code, mais apparemment tu appelles une URL sur une IP distante ? Je te conseille de faire d'abord tes tests sur une URL locale, et de voir ce que ça donne. Si ça marche il te faudra ensuite un mini proxy (en php par exemple), qui se chargera d'aller lire l'URL distante.

Justement c'est mon problème, je dois impérativement appeler une page externe et lui envoyer une variable en post via XMLHttpRequest.
Aurais-tu quelques indications à me (nous) fournir pour approfondir cette solution ?
 
Nouveau WRInaute
En fait, il est possible via Ajax d'appeler des pages se trouvant sur un serveur externe, mais pour cela il est necessaire de mettre en place un Security Manager. En gros, tu peux mettre en place un certificat (un peu comme SSH) que tu peux accepter de façon permanente, temporaire, ou pas du tout :D

Une partie du code doit être le suivant :

Code:
try {
  netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');
}
catch(e) {
  alert('erreur');
}

Pour la mise en place du certificat, je n'ai plus le lien depuis ... 2 jours, dsl
 
Nouveau WRInaute
La commande "UniversalBrowserRead" n'est valable que sous Netscape / Mozilla, cela n'aura aucun effet sur IE.
Non la seule vraie solution est de faire l'appel sur une page locale. Rien ne t'empêche dans cette page locale de coder les parties qui appellent le serveur distant.

Par ailleurs tu parles de faire une requête en POST, mais dans ton code la requête est en GET :
Code:
http.open("GET", url, true);

Pour simplifer je vais me baser sur une requête en GET justement :

1. tu appelles une URL locale :
Code:
var url = "scriptlocal.php?variable=valeur"; 
http.open("GET", url, true);

2. dans scriptlocal.php tu mets par exemple :
Code:
<?
echo file_get_contents("http://ipserveur2/scriptexterne.php?variable=".$variable);
?>

Dans ce cas scriptlocal.php appelle scriptexterne.php et renvoie la réponse.

Bien sûr si tu dois vraiment faire un POST ça se complique mais l'idée est la même : scriptlocal.php récupère les variables postées, et les envoie lui même en POST sur scriptexterne.php.
 
Discussions similaires
Haut