Читать страницу XML с помощью Javascript - PullRequest
0 голосов
/ 11 марта 2011

Эй, ребята, это сводит меня с ума, поэтому я хотел спросить экспертов на этом сайте, чтобы узнать, знаете ли вы, как это сделать =)

Я пытаюсь создать некоторый код JavaScript, который можетсчитывать элементы веб-страницы (например, что говорит первый абзац?).Вот что у меня есть, но это не работает, и я не могу понять, почему:

<script type="text/javascript">
<!--
var req;
// handle onreadystatechange event of req object
function processReqChange() {
    // only if req shows "loaded"
    if (req.readyState == 4) {
        // only if "OK"
        if (req.status == 200) {
            //document.write(req.responseText);
            alert("done loading");

            var responseDoc = new DOMParser().parseFromString(req.responseText, "text/xml");
            alert(responseDoc.evaluate("//title",responseDoc,null,
                        XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue);
         } 
         else {
            document.write("<error>could not load page</error>");
         }
    }
}

req = new XMLHttpRequest();
req.onreadystatechange = processReqChange;
req.open("GET", "http://www.apple.com", true);
req.send(null);
// -->

Предупреждение, которое продолжает появляться, является «нулевым», и я не могу понять, почему,Есть идеи?

1 Ответ

0 голосов
/ 11 марта 2011

Это может быть связано с междоменным ограничением ... если только вы не размещаете свою веб-страницу на apple.com.:) Вы также можете использовать jQuery и избежать написания всего этого и / или иметь дело с любыми возможными кросс-браузерными проблемами загрузки / анализа XML.http://api.jquery.com/category/ajax/

Обновление: Похоже, это может быть связано с типом контента исходного веб-сайта или чем-то подобным ... Например, этот код работает ...(Обратите внимание на загруженный домен ...)


var req;
// handle onreadystatechange event of req object
function processReqChange() {
    // only if req shows "loaded"
    if (req.readyState == 4) {
        // only if "OK"

        if (req.status == 200) {
            //document.write(req.responseText);
            //alert("done loading");
            //alert(req.responseText);

            var responseDoc = new DOMParser();
            var xmlText = responseDoc.parseFromString(req.responseText, "text/xml");
            try{
              alert(xmlText.evaluate("//title",xmlText,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue);
            }catch(e){
              alert("error");
            }
         } 
         else {
            document.write("could not load page");
         }
    }
}

req = new XMLHttpRequest();
req.onreadystatechange = processReqChange;
req.open("GET", "http://www.jquery.com", true);
req.send(null);

Я также попытался загрузить espn.com и google.com и заметил, что у них обоих есть "Content-Encoding: gzip", так что, возможно, в этом проблема, просто догадываясьхотя.

...