簡體   English   中英

Firefox和AJAX垃圾文件元素之后

[英]Firefox & AJAX Junk after document element

我使用頁面獲取腳本動態地將網頁加載到div中。 繼承人的代碼。 BTW Im使用Firefox w / Kubuntu

function fetch(URL, divId) {
        req = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("MSXML2.XMLHTTP.3.0");
    req.open("GET", URL);
    req.onreadystatechange = function() {
        if (req.readyState == 4 && req.status == 200) {
            document.getElementById(divId).innerHTML = req.responseText;
        }
    }
    req.send(null);
}

當我試圖讓它加載頁面沒有任何反應,我得到一個錯誤

錯誤:文檔元素之后的垃圾
源文件:file:///home/amnite/Stuff/MetalBraska/Shows/ContentRight.html
行:2,列:1
源代碼:
<img src="Layout/HeaderDiv.jpg" width="250px" height="7px">

我的答案是分段的

  • 錯誤
  • 但這甚至不重要
  • 真正的問題
  • 如何有人找到原因/真正的問題
  • 包含錯誤處理的解決方案

錯誤

該錯誤是因為它試圖將ContentRight.html解析為XML文件。 XML文件是嚴格的,所以任何像缺少</img>小東西都會導致整個失敗。 在這種情況下,有多個頂級元素。 (在普通的HTML中,只有一個頂級元素<html> )。 第二個頂級元素被認為是“文檔元素之后的垃圾”。 我假設圖像是導致問題的第二個元素。

但這甚至不重要

但這就是重點。 您沒有理由在第一頁中解析XML。 你只想要HTML。 對? 我的猜測是,它試圖解析XML並將其存儲到responseXML 由於該錯誤, responseXML為null。 但是你正在使用responseText所以應該沒有問題。 (忽略錯誤)

真正的問題

所有這些,現在我看到了問題。 您需要HTTP狀態200,其中req.status == 200 由於您沒有使用http://而您使用的是file:// ,因此沒有狀態代碼,也沒有服務器錯誤500可能性,也幾乎沒有機會檢測到未找到的404 所以你得到的只是0 當你得到這樣的東西時,一個好習慣是添加警戒線

如何有人找到原因/真正的問題

req.onreadystatechange = function() {
    alert(req.readyState)
    if (req.readyState == 4 && req.status == 200) {
        document.getElementById(divId).innerHTML = req.responseText;
    }
}

會提醒1 2 3 4所以你知道readyState是4.然后試試

req.onreadystatechange = function() {
    if(req.readyState == 4)
        alert(req.status)
    if (req.readyState == 4 && req.status == 200) {
        document.getElementById(divId).innerHTML = req.responseText;
    }
}

你會得到0 ,你會更接近問題。

包含錯誤處理的解決方案

一個好的解決方案是

req.onreadystatechange = function() {
    if (req.readyState == 4 && (req.status == 200 || req.status == 0 && req.responseText)) {
        document.getElementById(divId).innerHTML = req.responseText;
    } else {
        document.getElementById(divId).innerHTML = '<b>Error. HTTP ' + req.status + '</b>'
    }
}

因為如果status為0,那可能意味着Internet連接失敗,在這種情況下responseText將為空,然后您將獲得Error. HTTP 0 Error. HTTP 0 如果它不是空白,那就意味着它是file://並且它會像魅力一樣工作。

當然,服務器級錯誤會產生Error. HTTP 500 Error. HTTP 500或諸如此類的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM