“Null”在IE javascript中为null或不是对象错误

时间:2010-05-24 23:37:46

标签: ajax null internet-explorer getelementsbytagname

以下代码在Firefox和Chrome中运行良好,但出现错误:

'null' is null or not an object

在Internet Explorer中执行时。

if (xmlhttp.responseXML != null)
    {
    var xmlDoc = xmlhttp.responseXML.documentElement ;
    var ResultNodes = xmlDoc.getElementsByTagName ("Result") ;   <---- error here
    if (ResultNodes != null)
        {

(我原本以为指示后的行更有可能返回错误但是调试器说运行时错误在指示的行上)

任何想法为什么?

3 个答案:

答案 0 :(得分:1)

尝试这样的事情(像往常一样,IE做的事情不同)(取自http://msdn.microsoft.com/en-us/library/ms534370(VS.85).aspx

if (xmlhttp.responseXML.xml)
    var xmlDoc = xmlhttp.responseXML.xml;
else
    var xmlDoc = xmlhttp.responseXML;

答案 1 :(得分:1)

以为我会报告我的调查结果,现在我已经全部工作了。以下客户端代码(略有删节和匿名)包含解决此主题中概述的问题所需的所有解决方法,适用于IE(8.0.6001),FF(3.5.9)和Chrome(5.0)。 375.55 beta)。还没有在旧版本的浏览器下测试。非常感谢所有回复的人。

我还应该补充一点,我需要确保服务器响应需要包括:

Response.ContentType = "text/xml" ;

让它与IE一起使用。如果ContentType是文本/ HTML但IE咳嗽,FF不介意。

创建XMLHTTP请求的代码:

function GetXMLHTTPRequest () 
{
var activexmodes=["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] ; //activeX versions to check for in IE
if (window.ActiveXObject)  //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken)
    {
    for (var i=0; i < activexmodes.length ; i++)
        {
        try
            {
            return new ActiveXObject(activexmodes[i]) ;
            }
        catch (e)
            {    //suppress error
            }
        }
    }
 else if (window.XMLHttpRequest) // if Mozilla, Safari etc
    {
    return new XMLHttpRequest () ;
    }
 else
    {
    return (false) ;
    }
}

返回记录节点文本值的代码:

function GetRecordElement (ARecordNode, AFieldName)
{
try
    {
    if (ARecordNode.getElementsByTagName (AFieldName) [0].textContent != undefined)
        {
        return (ARecordNode.getElementsByTagName (AFieldName) [0].textContent) ; // Chrome, FF
        }

    if (ARecordNode.getElementsByTagName (AFieldName) [0].text != undefined)
        {
        return (ARecordNode.getElementsByTagName (AFieldName) [0].text) ;  //  IE
        }

    return ("unknown") ;    
    }
catch (Exception)
    {
    ReportError ("(GetRecordElement): " + Exception.description) ;
    }
}

执行AJAX请求的代码:

function GetRecord (s)
{
try 
    {
    ReportStatus ("") ;

    var xmlhttp = GetXMLHTTPRequest () ;
    if (xmlhttp)
        {
        xmlhttp.open ("GET", "blahblah.com/AJAXget.asp?...etc", true) ;

        if (xmlhttp.overrideMimeType) 
            {
            xmlhttp.overrideMimeType("text/xml") ;
            }
        xmlhttp.setRequestHeader ("Content-Type", "text/xml; charset=\"utf-8\"") ; 

        xmlhttp.onreadystatechange = function () 
            {
            if (xmlhttp.readyState == 4) 
                {
                if (xmlhttp.responseXML != null)
                    {
                    var xmlDoc = xmlhttp.responseXML;                
                    var ResultNodes = xmlDoc.getElementsByTagName ("Result") ;
                    if (ResultNodes != null)
                        {
                        var PayloadNode = xmlDoc.getElementsByTagName ("Payload") ;
                        if (PayloadNode != null)
                            {
                            var ResultText = ResultNodes [0].firstChild.nodeValue ;
                            if (ResultText == "OK")
                                {
                                ReportStatus (ResultText) ;
                                var RecordNode  = PayloadNode [0].firstChild ;
                                if (RecordNode != null)
                                    {
                                    UpdateRecordDisplay (RecordNode) ; // eventually calls GetRecordElement 
                                    }
                                else
                                    {
                                    ReportError ("RecordNode is null") ;
                                    }
                                }
                            else
                                {
                                ReportError ("Unknown response:" + ResultText) ;
                                }             
                            }    
                        else
                            {
                            ReportError ("PayloadNode is null") ;
                            }
                        }    
                    else
                        {
                        ReportError ("ResultNodes is null") ;
                        }
                    }
                else   
                    {
                    ReportError ("responseXML is null") ;
                    }
                }    
            else
                {  
                ReportStatus ("Status=" + xmlhttp.readyState) ;
                }
            }    

        ReportStatus ("Requesting data ...") ;
        xmlhttp.send (null) ;
        }
    else
        {
        ReportError ("Unable to create request") ;
        }        
    }
catch (err)
    {
    ReportError ("(GetRecord): " + err.description) ;
    }
}

答案 2 :(得分:0)

我刚刚为此找到了解决方案。在xml文件中创建编码类型us-ascii(encoding =&#39; us-ascii&#39;)。它解决了我的问题。