javascript - 請教一個關於Ajax讀取xml檔的問題?
为情所困
为情所困 2017-05-19 10:19:04
0
2
554

xml檔:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    <acc>
        <user>zhangsan</user>
        <psd>123456</psd>
    </acc>
    <acc>
        <user>lisi</user>
        <psd>654321</psd>
    </acc>
</urlset>

js程式碼如下:

function showHint(str) {
        "user static";
        var xmlhttp  = new XMLHttpRequest();
        var psd_text = document.getElementById("psd_text");
        if (str.length == 0) {
            psd_text.innerHTML = "";
            return;
        }
        xmlhttp.open("GET", "acc.xml", true);
        xmlhttp.send();
        xmlhttp.onreadystatechange = function() {
            var acc_node = xmlhttp.responseXML.documentElement.getElementsByTagName("user");
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                for(var i = 0; i < acc_node.length; i++){
                    if(acc_node[i].firstChild.nodeValue.indexOf(str)){
                        psd_text.innerHTML = acc_node[i].lastChild.nodeValue;
                    }
                }
            }
        }
    }
    

html程式碼如下:

<body>
    <h3>请在下面的输入框中输入用户名:</h3>
    <form>
        <label>用户名:</label><input type="text" id="user_input" value="" onkeyup="showHint(this.value)" />
    </form>
    <p>密码:<span id="psd_text"></span></p> 
</body>

在w3school學習到一個例子,就想改一下成輸入用戶名,然後在xml檔案裡找一個包含這個用戶名的節點,最後顯示密碼。

Google瀏覽器中總是報錯:Cannot read property 'documentElement' of null。
而火狐報錯:xmlhttp.responseXML is null。
搞了很久搞不定,上來求幫忙。

为情所困
为情所困

全部回覆(2)
伊谢尔伦

你程式碼中報錯的應該是這一句:

 var acc_node = xmlhttp.responseXML.documentElement.getElementsByTagName("user");

XMLHttpRequest.responseXML 屬性是一個唯讀值,它傳回一個包含請求檢索的HTML或XML的Document,如果請求未成功,尚未傳送,或檢索的資料無法正確解析為 XML 或 HTML,則為 null。來源

照著上面說的,此時請求未成功,所以 xmlhttp.responseXML 是 null,所以會報錯。你試試把這句程式碼寫在判斷 ajax 狀態的 if 語句裡面。

漂亮男人

非常感謝,已經解決。 (手動送花

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!