2010-05-24 153 views
2

下面的代碼執行在Firefox和鉻細,但給出了一個錯誤:「空」爲空或不是在IE中的對象錯誤的JavaScript

'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) 
     { 

(我還以爲行後的一個表示會更有可能返回錯誤,但調試器說,運行時錯誤是在指示線)

任何想法,爲什麼?

回答

1

以爲我會只是彙報我的發現,現在我把它所有的工作。以下客戶端代碼(略爲刪節和匿名)包含了我需要解決此主題中列出的問題的所有解決方法,適用於IE(8.0.6001),FF(3.5.9)和Chrome(5.0)。 375.55測試版)。尚未在舊版瀏覽器中進行測試。非常感謝所有迴應的人。

我還要補充一點,我需要確保服務器響應需要包括:

Response.ContentType = "text/xml" ; 

它與IE瀏覽器。 FF不介意ContentType是文本/ HTML還是IE瀏覽器。

代碼來創建一個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 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) ; 
    } 
} 
1

嘗試是這樣的(像往常一樣,IE瀏覽器的東西diferently)(坐從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; 
+0

好吧治好了你一個,但現在IE報告 所需的對象 在這一行: VAR xmlDoc中= xmlhttp.responseXML.documentElement; if(xmlhttp.responseXML.xml) var xmlDoc = xmlhttp.responseXML.xml;其他 var xmlDoc = xmlhttp.responseXML; var ResultNodes = xmlDoc.getElementsByTagName(「Result」);如果(ResultNodes!= null) var PayloadNode = xmlDoc.getElementsByTagName(「Payload」); < - error if(PayloadNode!= null) FF上的代碼確定,Chrome – rossmcm 2010-05-25 01:27:50

+0

以及如何停止註釋中的StackOverflow環繞行? - (代碼看起來很好,當我輸入它!) – rossmcm 2010-05-25 01:28:58

+0

哦,你必須刪除這一行: var xmlDoc = xmlhttp.responseXML.documentElement; 就在if(xmlhttp.responseXML.xml)行之前。 – jeanreis 2010-05-25 02:04:59

0

:執行AJAX請求

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) ; 
    } 
} 

代碼我剛剛找到了一個解決方案。在xml文件中編碼類型爲us-ascii(encoding ='us-ascii')。它解決了我的問題。

相關問題