0

嘿,伙计们,这让我发疯了,所以我想问问这个网站上的专家,看看你是否知道怎么做 =)

我正在尝试创建一些可以读取网页元素的 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);
// -->

不断出现的警报是“空的”,我不知道为什么。有任何想法吗?

4

1 回答 1

0

这可能是由于跨域限制...除非您在 apple.com 上托管您的网页。:) 您也可以使用 jQuery 并避免写出所有这些内容和/或处理任何常见的可能的跨浏览器 XML 加载/解析问题。http://api.jquery.com/category/ajax/

更新: 看起来它可能与源网站的 Content-Type 或类似的东西有关......例如,这段代码似乎工作......(注意加载的域......)


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”所以也许这就是问题所在,只是猜测。

于 2011-03-11T03:20:23.110 回答