[Javascript] Load d'un fichier depuis URL ??

Load d'un fichier depuis URL ?? [Javascript] - HTML/CSS - Programmation

Marsh Posté le 30-05-2009 à 22:51:32    

Hello!  :hello:  
 
J'ai un problème avec le code suivant... il fonctionne pas et je vois pas ce qui cloche!
 
Si qqn a une idée, thxxxx :)

Code :
  1. <html>
  2. <head>
  3. <script type="text/javascript">
  4. //create the Cross-browser XMLHttpRequest object
  5. function getFile(pURL) {
  6. if (window.XMLHttpRequest) { // code for Mozilla, Safari, etc  
  7.  xmlhttp=new XMLHttpRequest();
  8.  xmlhttp.onreadystatechange=postFileReady;
  9.  xmlhttp.open("GET", pURL, true); // leave true for Gecko
  10.  xmlhttp.send(null);
  11. } else if (window.ActiveXObject) { //IE  
  12.  xmlhttp=new ActiveXObject('Microsoft.XMLHTTP');
  13.  if (xmlhttp) {
  14.   xmlhttp.onreadystatechange=postFileReady;
  15.   xmlhttp.open('GET', pURL, true);
  16.   xmlhttp.send();
  17.  }
  18. } else {
  19.  alert('Your browser does not support the remote scripting object.');
  20. }
  21. }
  22. // function to handle asynchronus call
  23. function postFileReady() {
  24. if (xmlhttp.readyState==4) {
  25.  if (xmlhttp.status==200) {
  26.   //loadResults(xmlhttp.responseText);
  27.   document.getElementById('theExample').innerHTML=xmlhttp.responseText;
  28.  }
  29. }
  30. }
  31. </script>
  32. </head>
  33. <body onload="getFile('http://www.rodsdot.com/ee/latin.htm');">
  34.   <div id="theExample">Loading...</div>
  35. </body>
  36. </html>


Reply

Marsh Posté le 30-05-2009 à 22:51:32   

Reply

Marsh Posté le 31-05-2009 à 11:41:55    

up...

Reply

Marsh Posté le 01-06-2009 à 00:26:29    

Je me suis permis de refaire ton code :

Code :
  1. <html>
  2. <head>
  3.    <script type="text/javascript">
  4.  
  5.        // classe de creation de l'object XHR et d'appel GET
  6.        function XHR ()
  7.            {
  8.                this.xhr = null;
  9.  
  10.                // private
  11.                this._createXHR = function ()
  12.                    {
  13.                        if (window.XMLHttpRequest)
  14.                        {
  15.                            ptr.xhr = new XMLHttpRequest ();
  16.                        }
  17.                        else if (window.ActiveXObject) // IE
  18.                        {
  19.                            try { ptr.xhr = new ActiveXObject ("Msxml2.XMLHTTP" ); }
  20.                            catch (e) { ptr.xhr = new ActiveXObject ("Microsoft.XMLHTTP" ); }
  21.                        }
  22.  
  23.                        if (!ptr.xhr)
  24.                            throw "Pas de support Ajax !";    // erreur !
  25.  
  26.                        return true;
  27.                    }
  28.  
  29.                // private
  30.                this._exec = function (callback)
  31.                    {
  32.                        if (ptr.xhr.readyState == 4 && ptr.xhr.status == 200)
  33.                        {
  34.                            return callback (ptr.xhr);
  35.                        }
  36.                        return true;
  37.                    }
  38.  
  39.                // public
  40.                this.request = function (url, callback)
  41.                    {
  42.                        if (!ptr.xhr)
  43.                            return false;
  44.  
  45.                        ptr.xhr.onreadystatechange = function () { return ptr._exec (callback); };
  46.                        ptr.xhr.open ('GET', url, true);
  47.                        ptr.xhr.send (null);
  48.                        return true;
  49.                    }
  50.  
  51.                var ptr = this;
  52.                ptr._createXHR ();
  53.            }
  54.  
  55.  
  56.        function postFileReady (result)
  57.            {
  58.                document.getElementById ('theExample').innerHTML = result.responseText;
  59.                return true;
  60.            }
  61.  
  62.  
  63.        window.onload = function ()
  64.            {
  65.                var xmlhttp = new XHR ();
  66.                xmlhttp.request ("http://www.rodsdot.com/ee/latin.htm", postFileReady);
  67.                return true;
  68.            }
  69.    </script>
  70. </head>
  71. <body>
  72.    <div id="theExample">Loading...</div>
  73. </body>
  74. </html>

Message cité 1 fois
Message édité par SICKofitALL le 01-06-2009 à 00:35:31

---------------
We deserve everything that's coming...
Reply

Marsh Posté le 01-06-2009 à 11:39:17    

SICKofitALL a écrit :

Je me suis permis de refaire ton code :

Code :
  1. <html>
  2. <head>
  3.    <script type="text/javascript">
  4.  
  5.        // classe de creation de l'object XHR et d'appel GET
  6.        function XHR ()
  7.            {
  8.                this.xhr = null;
  9.  
  10.                // private
  11.                this._createXHR = function ()
  12.                    {
  13.                        if (window.XMLHttpRequest)
  14.                        {
  15.                            ptr.xhr = new XMLHttpRequest ();
  16.                        }
  17.                        else if (window.ActiveXObject) // IE
  18.                        {
  19.                            try { ptr.xhr = new ActiveXObject ("Msxml2.XMLHTTP" ); }
  20.                            catch (e) { ptr.xhr = new ActiveXObject ("Microsoft.XMLHTTP" ); }
  21.                        }
  22.  
  23.                        if (!ptr.xhr)
  24.                            throw "Pas de support Ajax !";    // erreur !
  25.  
  26.                        return true;
  27.                    }
  28.  
  29.                // private
  30.                this._exec = function (callback)
  31.                    {
  32.                        if (ptr.xhr.readyState == 4 && ptr.xhr.status == 200)
  33.                        {
  34.                            return callback (ptr.xhr);
  35.                        }
  36.                        return true;
  37.                    }
  38.  
  39.                // public
  40.                this.request = function (url, callback)
  41.                    {
  42.                        if (!ptr.xhr)
  43.                            return false;
  44.  
  45.                        ptr.xhr.onreadystatechange = function () { return ptr._exec (callback); };
  46.                        ptr.xhr.open ('GET', url, true);
  47.                        ptr.xhr.send (null);
  48.                        return true;
  49.                    }
  50.  
  51.                var ptr = this;
  52.                ptr._createXHR ();
  53.            }
  54.  
  55.  
  56.        function postFileReady (result)
  57.            {
  58.                document.getElementById ('theExample').innerHTML = result.responseText;
  59.                return true;
  60.            }
  61.  
  62.  
  63.        window.onload = function ()
  64.            {
  65.                var xmlhttp = new XHR ();
  66.                xmlhttp.request ("http://www.rodsdot.com/ee/latin.htm", postFileReady);
  67.                return true;
  68.            }
  69.    </script>
  70. </head>
  71. <body>
  72.    <div id="theExample">Loading...</div>
  73. </body>
  74. </html>



 
 :love:  :jap:  
thx pour ce code!
 
Fonctionne nickel sous IE, mais ca donne rien sous Firefox  :sleep:  
 
une idée ptetre?

Reply

Marsh Posté le 01-06-2009 à 11:44:44    

le_duc a écrit :


 
 :love:  :jap:  
thx pour ce code!
 
Fonctionne nickel sous IE, mais ca donne rien sous Firefox  :sleep:  
 
une idée ptetre?


ca fonctionne pas sous FF ? Je dirais que c'est que chez toi car je l'ai dev et testé que sous FF, et ca fonctionne très bien... chez moi :D
 
alors dans l'ordre :
1) tu as Firebug ? sinon il est temps de l'installer et de voir ce qui est retourné exactement.
2) l'url que tu appelles, remplaces "http://www.rodsdot.com/ee/latin.htm" par "/ee/latin.htm", histoire de voir qu'il ne s'agit pas d'une restriction qqconque (chez moi forcément je l'ai testé sur une pages qiu m'est accessible).


---------------
We deserve everything that's coming...
Reply

Marsh Posté le 01-06-2009 à 12:36:03    

SICKofitALL a écrit :


ca fonctionne pas sous FF ? Je dirais que c'est que chez toi car je l'ai dev et testé que sous FF, et ca fonctionne très bien... chez moi :D
 
alors dans l'ordre :
1) tu as Firebug ? sinon il est temps de l'installer et de voir ce qui est retourné exactement.
2) l'url que tu appelles, remplaces "http://www.rodsdot.com/ee/latin.htm" par "/ee/latin.htm", histoire de voir qu'il ne s'agit pas d'une restriction qqconque (chez moi forcément je l'ai testé sur une pages qiu m'est accessible).


 
quand tu dis "une page qui m'est accessible", t'entends quoi par là??
 
Car le but du script est de s'exécuter localement et d'aller lire une pae web (sur un serveur web donc), pas sur la même machine/domaine. En espérant que c'est possible bien sûr :D
 
edit: Firebug m'a permis de constater que le test suivant n'est pas passé:
 
if (ptr.xhr.readyState == 4 && ptr.xhr.status == 200)
 
readyState est à 1, tandis que status est vide.... pas bon ca  :pt1cable:

Message cité 1 fois
Message édité par le_duc le 01-06-2009 à 12:42:11
Reply

Marsh Posté le 01-06-2009 à 13:24:36    

le_duc a écrit :


 
quand tu dis "une page qui m'est accessible", t'entends quoi par là??
 
Car le but du script est de s'exécuter localement et d'aller lire une pae web (sur un serveur web donc), pas sur la même machine/domaine. En espérant que c'est possible bien sûr :D
 
edit: Firebug m'a permis de constater que le test suivant n'est pas passé:
 
if (ptr.xhr.readyState == 4 && ptr.xhr.status == 200)
 
readyState est à 1, tandis que status est vide.... pas bon ca  :pt1cable:


Je m'en doute qu'il s'agit de lire une page web :D
Par contre, lire le contenu d'un autre domaine ce n'est PAS possible (Same Origin Policy : https://developer.mozilla.org/en/Sa [...] vaScript). Pour celà il te faut passer par un script (en PHP par exemple) qui servirait de "proxy" : c'est ce script qui va lire la page demandée et renvoyer son contenu.
 
Tu peux vérifier la valeur de retour HTTP avec la propriété "status" qui à mon humble reste n'est pas 200 (200 = tt est ok).
Modifies ca dans le code :
 

Code :
  1. // ....
  2. this._exec = function (callback)
  3.    {
  4.        if (console)
  5.            console.log (ptr.xhr); // mate la doc de FireBug pour en savoir plus...
  6.  
  7.        if (ptr.xhr.readyState == 4 && ptr.xhr.status == 200)
  8.        {
  9.            return callback (ptr.xhr);
  10.        }
  11.        return true;
  12.    }
  13. // ....


Message édité par SICKofitALL le 01-06-2009 à 13:25:06

---------------
We deserve everything that's coming...
Reply

Marsh Posté le 01-06-2009 à 13:28:05    

En fait ca te permetra surtout de voir que la requete est OK, mais qu'il retourne rien, comme s'il était bloqué ;)
 
Concernant le script proxy, ca traine à foisons sur le net, en voilà un : http://snipplr.com/view/8418/ajax-xss-proxy-script/


Message édité par SICKofitALL le 01-06-2009 à 13:29:09

---------------
We deserve everything that's coming...
Reply

Sujets relatifs:

Leave a Replay

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