IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

[AJAX] XMLHttpRequest, comment récupérer un HTMLDocument?


Sujet :

AJAX

  1. #1
    Membre à l'essai

    Inscrit en
    Novembre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 9
    Points : 14
    Points
    14
    Par défaut [AJAX] XMLHttpRequest, comment récupérer un HTMLDocument?
    Bonjour à tous,

    Voila, je souhaite réaliser un petit script AJAX qui récupére une page à l'aide de XMLHttpRequest et qui en extrait la valeur de certains champs afin de pouvoir les afficher dans la page courante.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    /*
    Function httpRequest:
    - Method: GET
    - URL: Handles remote URL
    - Handles Login/password
    - responseFormat: Return the response of the request in the desired format (XML or Text, default Text)
    - Waits for the end of the request
    */
    function httpRequest(method, url, username, password, responseFormat){
    	// Defining XMLHttpRequest element
    	if(window.XMLHttpRequest){ // Firefox, Opera, Safari
    		var xhr_object = new XMLHttpRequest(); 
    		// Enable remote access for XMLHttpRequest
    		netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');
    	}else{ // Other browser
    		alert("Your browser does not support XMLHttpRequest, try Firefox."); 
    		return; 
    	} 
     
    	// Preparing request
    	if(method == "GET"){ // The method is allowed
    		xhr_object.open(method,url, false, username, password);
    	}else{
    		alert("Incorrect method. The correct methods are: GET, POST.");
    		return;
    	}
     
    	// Sending request
    	xhr_object.send(null);
    	if(xhr_object.readyState == 4){
    		if(xhr_object.status == 200){
    			if(responseFormat == "XML"){
    				return xhr_object.responseXML.documentElement;
    			}else{
    				return xhr_object.responseText;
    			}
    		}else{
    			alert("HTML status code error, check again username/password.");
    			return;
    		}
    	}else{
    		alert("Request didn't complete, check again URL.");
    		return;
    	}
    }
     
    function main(){
    	// Loading the Nagios Telnet Availability Report
    	var telnetAvailabilityReport = httpRequest("GET", "http://www.monurl.com", "user", "pass", "Text");
            alert(getElementsByClass("serviceOK",telnetAvailabilityReport,"td")[2]));
    monurl.com me retourne un document dont le type mime est : "text/html".

    Le problème que je rencontre est que:
    - xhr_object.responseXML = null vu que le type mime est "text/html"
    - xhr_object.responseText est un string, et il n'est donc pas possible d'appliquer des getElementBy dessus...

    Donc comment puis-je faire pour récupérer mes infos de manière propre? (j'aimerais éviter les strpos, substr... et utiliser les Id/Class des éléments HTML pour récupérer l'info.) Est-il possible de transformer mon string sortant de responseText en HTMLDocument?

    Merci d'avance!!!

    Nathan

  2. #2
    Membre expérimenté Avatar de DoubleU
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 106
    Points : 1 388
    Points
    1 388
    Par défaut
    Salut Nathan, bienvenue.

    Donc comment puis-je faire pour récupérer mes infos de manière propre? (j'aimerais éviter les strpos, substr... et utiliser les Id/Class des éléments HTML pour récupérer l'info.) Est-il possible de transformer mon string sortant de responseText en HTMLDocument?
    Récupérer un HTMLDocument, ce n'est pas possible. Le mieux que tu puisses récupérer, c'est un document XML sur lequel tu appliqueras les méthodes classiques du DOM (qui te permettront d'arriver au même résultat, mais un peu moins facilement).

    Est-ce que la page que tu vas récupérer est un xml valide (dans sa structure, peu importe le header) ? Si oui, tu peux peut-être utiliser le responseText pour récupérer un xml via la classe DOMParser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var parser = new DOMParser();
    var doc = parser.parseFromString(aStr, "text/xml");
    Cependant, je ne sais pas ce que ca va donner si tu as un doctype, peut être qu'il faudra le supprimer de la chaine.

  3. #3
    Membre à l'essai

    Inscrit en
    Novembre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 9
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par DoubleU Voir le message
    Salut Nathan, bienvenue.


    Récupérer un HTMLDocument, ce n'est pas possible. Le mieux que tu puisses récupérer, c'est un document XML sur lequel tu appliqueras les méthodes classiques du DOM (qui te permettront d'arriver au même résultat, mais un peu moins facilement).

    Est-ce que la page que tu vas récupérer est un xml valide (dans sa structure, peu importe le header) ? Si oui, tu peux peut-être utiliser le responseText pour récupérer un xml via la classe DOMParser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var parser = new DOMParser();
    var doc = parser.parseFromString(aStr, "text/xml");
    Cependant, je ne sais pas ce que ca va donner si tu as un doctype, peut être qu'il faudra le supprimer de la chaine.
    Merci pour ta réponse,
    Non, la page que je vais récupérer n'est pas un document XML valide mais un document HTML, sinon j'aurais pu utiliser XMLHttpRequest.responseXML au lieu de responseText.
    En recherchant un peu plus j'ai trouvé que la récupération de documents HTML n'était pas implémenté dans cette version de XMLHttpRequest mais est en cours de développement et le sera dans la prochaine (sous la forme d'une méthode responseHTML).
    Du coup j'ai utilisé des opérations sur des chaines de caractères, c'est pas très propre et pas très évolutif, mais ça marche...
    Cela dit, je vais tester la méthode que tu proposes, peut être que ca fonctionne pour un document HTML également:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var parser = new DOMParser();
    var doc = parser.parseFromString(aStr, "text/html");

Discussions similaires

  1. [AJAX] XmlHttpRequest : récupérer la valeur de retour
    Par jmnicolas dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 04/08/2008, 15h37
  2. Réponses: 18
    Dernier message: 09/07/2008, 09h45
  3. Réponses: 3
    Dernier message: 13/06/2008, 20h33
  4. [AJAX] Comment récupérer et afficher un résultat ?
    Par kamacho dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 15/02/2008, 20h30
  5. [AJAX] Comment récupérer le contenu d'une balise
    Par MicaelFelix dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 06/01/2007, 04h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo