Je pensais que je voudrais juste rapport mes conclusions, maintenant que je l'ai tout de travail. Le code côté client suivant (légèrement abrégé et anonymisé) contient toutes les solutions de rechange dont j'avais besoin pour résoudre les problèmes décrits dans ce fil de discussion et fonctionne sur IE (8.0.6001), FF (3.5.9) et Chrome (5.0. 375,55 bêta). Encore à tester sous les anciennes versions de navigateurs. Un grand merci à tous ceux qui ont répondu.
Je dois aussi ajouter que je devais faire en sorte que la réponse du serveur nécessaire pour inclure:
Response.ContentType = "text/xml" ;
pour que cela fonctionne avec IE. FF ne s'est pas occupé si le ContentType était le texte/HTML mais IE toussé.
code pour créer une demande 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) ;
}
}
code pour renvoyer la valeur de texte d'un nœud d'enregistrement:
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) ;
}
}
code pour effectuer la requête 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) ;
}
}
Eh bien, ce que l'on guérit, mais IE rapporte maintenant objet requis à cette ligne: var xmlDoc = xmlhttp.responseXML.documentElement; if (xmlhttp.responseXML.xml) var xmlDoc = xmlhttp.responseXML.xml; sinon var xmlDoc = xmlhttp.responseXML; var ResultNodes = xmlDoc.getElementsByTagName ("Résultat"); si (ResultNodes! = Null) { var = PayloadNode de xmlDoc.getElementsByTagName ("Payload"); <- Erreur si (PayloadNode! = Null) code OK sur FF, Chrome – rossmcm
et comment vous arrêter StackOverflow envelopper des lignes dans les commentaires? - (code avait l'air bien quand je tapais dans!) – rossmcm
Oh, vous devez supprimer cette ligne: var = xmlDoc xmlhttp.responseXML.documentElement; juste avant la ligne if (xmlhttp.responseXML.xml). – jeanreis