javascript代码在浏览器中不起作用

时间:2014-06-03 13:32:07

标签: javascript dom

我有这个代码,我正在编程时使用PsPad编辑器。当我在PsPad中运行“HTML页面预览”时它可以工作,但是当我尝试在浏览器中打开它时它不起作用。在Chrome上,它只会提醒“Undefined is not a function”。在Firefox上,它只打印undefined和警告空窗口。在Internet Explorer上它什么都不做。如果可能的话,你能用代码示例给我一些简单的答案吗?(这段代码应该打印XML的内容)

<!DOCTYPE html>
<html>
    <head>
    <script src="loadxmldoc.js"></script>
    <script src="https://maps.googleapis.com/maps/api/js?sensor=false"></script> 
    </head>
    <body>
        <script>
            var xmldoc= loadXMLDoc('skoly.xml');

            var d = document.createElement('div'); 
            var t = document.createTextNode(xmldoc.xml); 
            d.appendChild(t);
            document.write('<pre>' + d.innerHTML + '</pre>');

            alert(xmldoc.xml);
        </script>
    </body>
</html>

loadxmldoc.js:

function loadXMLDoc(dname) {
    try { //Internet Explorer
        xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
    } catch(e) {
        try { //Firefox, Mozilla, Opera, etc.
            xmlDoc=document.implementation.createDocument("","",null);
        } catch(e) {
            alert(e.message)
        }
    }
    try {
        xmlDoc.async=false;
        xmlDoc.load(dname);
        return(xmlDoc);
    } catch(e) {
        alert(e.message)
    }
    return(null);
}

2 个答案:

答案 0 :(得分:0)

您为Firefox / Chrome实例化XMLHttpRequest对象的声明不正确,要正确实例化,请执行以下操作:

var xmldoc = new XMLHttpRequest();

要从同一个域获取文档(出于安全原因无法从不同的域获取),请使用open方法获取xml。

xml.open(method, url, boolean);
xml.send(null);   // if using post, then you will send data and not null*

// method - GET or POST
// url - location to the file being loaded
// bool - true or false(true for asynchronous)

这是使用ajax获取文件的最简单的函数:

<script>
    function loadxmldoc(method, url)
    {
        var xml;
        try
        {
            xml = new ActiveXObject('Microsoft.XMLDOM');
        }
        catch(e)
        {
            try
            {
                xml = new XMLHttpRequest();
            }
            catch(e)
            {
                alert('Couldn\'t instantiate ajax');
            }
        }

        xml.onreadystatechange = function()
        {
            if( xml.readyState == 4 && xml.status == 200 )
            {    // ajax ready           // page found
                document.getElementById('someId').innerHTML = xml.responseText;
            }
        };

        xml.open(method, url, true);    // open connection
        xml.send(null);
    }
</script>

我正在使用xml.responseText,对您而言,它应该是xml.responseXml,您必须正确解析它。

答案 1 :(得分:0)

这部分返回错误:

alert(xmldoc.xml);

我不确定你想要实现什么,但是这段代码试图返回一个属性&#34; xml&#34;变量&#34; xmldoc&#34;。换句话说,如果xmldoc是一个如下所示的对象,这将起作用:

var xmldoc = {
    xml: "something here"
};

它正在返回&#34;无法读取属性&#39; xml&#39; of null&#34;因为xmldoc的值为null,而您正在尝试返回其属性。