2010-12-15 42 views
5

J'essaie d'obtenir des détails de la page (titre de la page, images sur la page, etc.) d'une URL/page entrée arbitrairement. J'ai un script proxy back-end que j'utilise via un ajax GET afin de retourner le code HTML complet de la page distante. Une fois que je reçois la réponse ajax, j'essaie d'exécuter plusieurs sélecteurs jQuery pour extraire les détails de la page. Voici l'idée générale:sélecteurs jQuery sur une chaîne de réponse ajax qui est une page html complète

$.ajax({ 
     type: "GET", 
     url: base_url + "/Services/Proxy.aspx?url=" + url, 
     success: function (data) { 
      //data is now the full html string contained at the url 

      //generally works for images 
      var potential_images = $("img", data); 

      //doesn't seem to work even if there is a title in the HTML string 
      var name = $(data).filter("title").first().text(); 

      var description = $(data).filter("meta[name='description']").attr("content"); 

     } 
    }); 

Parfois, l'utilisation $("selector", data) semble fonctionner alors que d'autres fois $(data).filter("selector") semble fonctionner. Parfois, ni travaille. Quand je viens d'inspecter le contenu de $(data), il semble que certains nœuds passent à travers, mais certains disparaissent simplement. Est-ce que quelqu'un sait une façon cohérente d'exécuter des sélecteurs sur une chaîne HTML complète?

+0

double possible de [parse string html avec jquery] (http://stackoverflow.com/questions/704679/parse- html-string-with-jquery) –

Répondre

2

Votre question est un peu vague, en particulier w/r/t quelle entrée provoque quel code pour échouer, et comment. Ce pourrait être du HTML malformé, mais je ne peux que deviner.

Cela dit, votre meilleur pari est de travailler avec $(data) plutôt que data:

$.ajax({ 
    type: "GET", 
    url: base_url + "/Services/Proxy.aspx?url=" + url, 
    success: function(data) { 
     var $data = $(data); 

     //data is now the full html string contained at the url 
     //generally works for images 
     var potential_images = $("img", $data); 

     //doesn't seem to work even if there is a title in the HTML string 
     var name = $data.filter("title").first().text(); 

     var description = $data.filter("meta[name='description']").attr("content"); 
    } 
}); 
+0

Malheureusement, l'entrée pourrait potentiellement être le HTML de n'importe quelle page arbitraire. J'ai essayé avec de nombreux sites Web populaires, y compris cnn.com, twitter.com, et espn.go.com - qui semblent tous avoir les mêmes problèmes, en particulier avec l'extraction du titre. – Ben