以爲我會只是彙報我的發現,現在我把它所有的工作。以下客戶端代碼(略爲刪節和匿名)包含了我需要解決此主題中列出的問題的所有解決方法,適用於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) ;
}
}
好吧治好了你一個,但現在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
以及如何停止註釋中的StackOverflow環繞行? - (代碼看起來很好,當我輸入它!) – rossmcm 2010-05-25 01:28:58
哦,你必須刪除這一行: var xmlDoc = xmlhttp.responseXML.documentElement; 就在if(xmlhttp.responseXML.xml)行之前。 – jeanreis 2010-05-25 02:04:59