none
Récupérer le contenu d'une page HTML par une fonction RRS feed

  • Question

  • Bonjour à tous :)

    Je fais une application Win8 en HTML avec Visual Studio.
    J'ai trouvé le code suivant qui permet de récupérer le code généré d'une page HTML :

    WinJS.xhr({ url: 'http://blabla.fr' }).done(
      function completed(resultat) {
        if (resultat.status === 200) {
          console.log(resultat.response);
        }
      },
      function error(resultat) {
        console.log('Erreur : ' + resultat.statusText);
      },
      function progress(resultat) {
        console.log('ReadyState : ' + resultat.readyState);
      }
    );
    Sauf que moi je voudrais mettre ça dans une fonction, afin de récupérer le code dans une variable, pour me servir du résultat.
    J'ai essayé de définir une variable avant WinJS.xhr, qui est remplie dans completed, error et progress et renvoyé après, mais ça ne marche pas, ça me renvoie toujours une valeur vide :

    fonction test() {
    var retour="";

    WinJS.xhr({ url: 'http://blabla.fr' }).done( function completed(resultat) { if (resultat.status === 200) { retour = resultat.response; } }, function error(resultat) { retour = 'Erreur : ' + resultat.statusText; }, function progress(resultat) { retour = 'ReadyState : ' + resultat.readyState; } );
    return retour;
    }

    J'ai aussi essayé ça, sans succès non plus :(

    fonction test() {

    return WinJS.xhr({ url: 'http://blabla.fr' }).done( function completed(resultat) { if (resultat.status === 200) { return resultat.response; } }, function error(resultat) { return 'Erreur : ' + resultat.statusText; }, function progress(resultat) { return 'ReadyState : ' + resultat.readyState; } );
    }

    Comment faire pour utiliser WinJS.xhr dans une fonction et renvoyer le retour ?

    Merci d'avance de votre aide :)

    dimanche 1 février 2015 14:02

Réponses

  • Bonjour,

    Entendu, pour verifier s'i s'agit d'un cache, utilisez Fiddler, il vous permettra de voir les requites qui sont envoyés, si la requête est bien envoyée a chaque fois et que la réponse n'est pas mise à jours, alors ils s'agit d'un cache côté server.

    Si la requête n'est pas envoyée, soit il s'agit d'un cache client, soit la requête n'est tout bonnement pas envoyée.

    Pour vous affranchir d'un problème de cache vous pouvez ajouter un parameter à votre requête comme un timestamp :

    url: 'http://blabla.fr/?v=' + new Date().getTime()

    Cordialement,


    Kevin BEAUGRAND, Modis FRANCE
    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont résolu votre problème.



    • Modifié BEAUGRAND Kevin jeudi 5 février 2015 10:10
    • Marqué comme réponse yoanpg vendredi 6 février 2015 21:30
    jeudi 5 février 2015 10:04

Toutes les réponses

  • Bonjour,

    En fait, il s'agit d'une petite subtilité. Lorsque vous utilisez WinJS.xhr il faut vous souvenir que vous êtes en asynchrone. C'est à dire, que vous obtiendrez le résultat de la requite xhr après le retour de la function test.

    En réalité, je vous conseil de faire plutot comme ceci :

    
    
    function test(){
    return WinJS.xhr({ url: 'http://blabla.fr' })
    .then(function (resultat) {
        if (resultat.status === 200) {
          return resultat.response;
        }
      });
    }
    

    Ensuite, dans vos appels, actuellement vous devriez avoir quelquechose comme cela :

    var result = test();
    
    /// Autres actions
    
    

    Vous devez changer ces appels en quelquechose comme ceci:

    test().done(function(result){
    /// Autres actions
    }, function error(e){
    //Traitement de l'erreur
    });

    Cordialement,


    Kevin BEAUGRAND, Modis FRANCE
    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont résolu votre problème.

    dimanche 1 février 2015 15:23
  • Merci pour l'explication de cette subtilité.
    Maintenant ça marche :)

    Par contre, si je rappelle régulièrement ma fonction test() avec un setTimeout(test(),1000), est-ce que le contenu de la page internet est à nouveau "scanné" ? J'ai l'impression que non, qu'il réutilise le même code "aspiré".

    lundi 2 février 2015 18:10
  • Bonjour,

    Si vous appelez le code avec un setTimeout, l'appel sera effectué systématiquement.

    Ce qu'il peut se passer est que le serveur garde un cache de la réponse.

    Par contre, n'oubliez pas de noter comme réponse les posts qui ont répondu à votre questions. Et d'ouvrir un nouveau post pour tout autre question.

    Cordialement,


    Kevin BEAUGRAND, Modis FRANCE
    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont résolu votre problème.

    lundi 2 février 2015 19:14
  • Bonjour,

    Voir ce lien :

    http://stackoverflow.com/questions/16642196/get-html-code-from-a-website-c-sharp

    string urlAddress = "http://google.com";
    
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlAddress);
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    
    if (response.StatusCode == HttpStatusCode.OK)
    {
      Stream receiveStream = response.GetResponseStream();
      StreamReader readStream = null;
    
      if (response.CharacterSet == null)
      {
         readStream = new StreamReader(receiveStream);
      }
      else
      {
         readStream = new StreamReader(receiveStream, Encoding.GetEncoding(response.CharacterSet));
      }
    
      string data = readStream.ReadToEnd();
    
      response.Close();
      readStream.Close();
    }

    mardi 3 février 2015 09:36
  • Merci Ismaiel, mais ça c'est en C#, pas en HTML non ?
    mercredi 4 février 2015 19:59
  • Bonjour,

    Et il me semblait que la réponse ai déjà été donnée, ou ne vous suffit-elle pas ?

    Cordialement,


    Kevin BEAUGRAND, Modis FRANCE
    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont résolu votre problème.

    mercredi 4 février 2015 20:32
  • En partie, car j'ai toujours le problème que après mon setTimeout, la page chargée n'est pas actualisé (dû à un cache ou quelque chose comme ça)
    jeudi 5 février 2015 08:42
  • Bonjour,

    Entendu, pour verifier s'i s'agit d'un cache, utilisez Fiddler, il vous permettra de voir les requites qui sont envoyés, si la requête est bien envoyée a chaque fois et que la réponse n'est pas mise à jours, alors ils s'agit d'un cache côté server.

    Si la requête n'est pas envoyée, soit il s'agit d'un cache client, soit la requête n'est tout bonnement pas envoyée.

    Pour vous affranchir d'un problème de cache vous pouvez ajouter un parameter à votre requête comme un timestamp :

    url: 'http://blabla.fr/?v=' + new Date().getTime()

    Cordialement,


    Kevin BEAUGRAND, Modis FRANCE
    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont résolu votre problème.



    • Modifié BEAUGRAND Kevin jeudi 5 février 2015 10:10
    • Marqué comme réponse yoanpg vendredi 6 février 2015 21:30
    jeudi 5 février 2015 10:04
  • Ok je vais tester ça, merci :)
    jeudi 5 février 2015 12:04
  • Ca marche ! :)

    Merci de l'aide

    vendredi 6 février 2015 21:30