2015-08-25 11 views
5

मैं पता है कि सबसे अच्छा तरीका है एपीआई (Is there a way to not send cookies when making an XMLHttpRequest on the same origin?)लायें एपीआई: शीर्षक, कीवर्ड और http प्रतिक्रिया से शरीर पाठ

लाने का उपयोग कर responseText से शीर्षक, कीवर्ड और उपयोगकर्ता के लिए सामग्री दिखाई पाने के लिए हो सकता है चाहते हो जाओ पल में, मैं रेगुलर एक्सप्रेशन का उपयोग उदाहरण के लिए, प्रतिक्रिया पाठ से शीर्षक प्राप्त करने के लिए:

var re_title = new RegExp("<title>[\n\r\s]*(.*)[\n\r\s]*</title>", "gmi"); 
var title = re_title.exec(responseText); 
if (title) 
    title = title[1] 

और कीवर्ड मेटा टैग में सामग्री प्राप्त करने, मैं कई नियमित अभिव्यक्ति को रोजगार की जरूरत है।

उपयोगकर्ता को दिखाई देने वाली सामग्री प्राप्त करने के लिए, हमें स्क्रिप्ट, div आदि जैसे टैग की आवश्यकता नहीं है, हमें स्क्रिप्ट टैग के बीच टेक्स्ट की आवश्यकता नहीं है। यह केवल उन शब्दों को प्राप्त करना है जो प्रतिक्रिया के शरीर में सार्थक हैं।

मुझे लगता है कि इसके लिए नियमित अभिव्यक्तियों का उपयोग करके विभिन्न स्टैक ओवरफ्लो पोस्ट के अनुसार भी सही दृष्टिकोण नहीं है। विकल्प क्या हो सकता है?

+0

यदि आप ग्राहक पर हैं, तो आपको मूल डीओएम एपीआई पार्सिंग और हेरफेर करने के लिए मिला है। यदि आप सर्वर पर हैं, तो कई डोम पुस्तकालय उपलब्ध हैं। चूंकि यह "टूल की अनुशंसा" प्रश्न के लिए है, इसलिए मैं इसे बंद करने के लिए मतदान कर रहा हूं [ऑफ-विषय (# 4)] (http://stackoverflow.com/help/on-topic)। – zzzzBov

+0

@zzzzBov सवाल मेरे लिए पूरी तरह से विषय पर दिखता है। यह दिखाता है कि ओपी क्या चाहता है, उन्होंने क्या प्रयास किया है, और वे विकल्पों की तलाश क्यों कर रहे हैं। –

+2

[रेगेक्स के साथ एचटीएमएल का विश्लेषण न करें] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags) – klenium

उत्तर

2

zzzzBov के रूप में उल्लेख किया है, आप एक fetch अनुरोध के response.text() पार्स करने से इस लक्ष्य को हासिल करने के लिए DOMParser एपीआई के अपने ब्राउज़र के कार्यान्वयन का उपयोग कर सकते हैं। यहाँ एक उदाहरण है कि खुद के लिए इस तरह के एक अनुरोध भेजता है और शीर्षक, कीवर्ड और मुख्य पाठ पार्स करता है:

<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <title>This is the page title</title> 
 
    <meta charset="UTF-8"> 
 
    <meta name="description" content="Free Web Help"> 
 
    <meta name="keywords" content="HTML,CSS,XML,JavaScript"> 
 
    <meta charset="utf-8"> 
 
    <script> 
 
    fetch("https://dl.dropboxusercontent.com/u/76726218/so.html") 
 
     .then(function(response) { 
 
     return (response.text()); 
 
     }) 
 
     .then(function(responseText) { 
 
     var parsedResponse = (new window.DOMParser()).parseFromString(responseText, "text/html"); 
 
     document.getElementById("title").innerHTML = "Title: " + parsedResponse.title; 
 
     document.getElementById("keywords").innerHTML = "Keywords: " + parsedResponse.getElementsByName("keywords")[0].getAttribute("content"); 
 
     document.getElementById("visibleText").innerHTML = "Visible Text: " + parsedResponse.getElementsByTagName("body")[0].textContent; 
 
     }); 
 
    </script> 
 
</head> 
 

 
<body> 
 

 
    <div>This text is visible to the user.</div> 
 
    <div>So <i>is</i> <b>this</b>.</div> 
 
    <hr> 
 
    <b>Results:</b> 
 
    <ul id="results"> 
 
    <li id="title"></li> 
 
    <li id="keywords"></li> 
 
    <li id="visibleText"></li> 
 
    </ul> 
 

 
</body> 
 

 
</html>

मैं Fetch API, Using Fetch, और Fetch basic concepts उपयोगी पर मोज़िला प्रलेखन पाया।

+0

धन्यवाद आरएफवी! यह बहुत अच्छा है लेकिन प्रतिक्रिया एपीआई के परिणामस्वरूप प्रतिक्रिया xML भी उपलब्ध है? – jack

+0

क्या आप कृपया http://stackoverflow.com/questions/32212499/how-to-evaluate-http-response-received-in-fetch-api?noredirect=1#comment52309600_32212499 पर एक नज़र डालें। धन्यवाद – jack

+0

'.response' का प्रयोग करें, न कि'responseXML'। दस्तावेज़ एक HTML दस्तावेज़ है, जो एक अच्छी तरह से गठित XML दस्तावेज़ नहीं है। –

संबंधित मुद्दे