Allora il titolo non è dei più appropriati, mi spiegherò meglio ora. Allora, ho queste 4 funzioni JS.
ajaxRequest la uso per fare chiamate asincrone, removeWhiteSpace elimina gli spazi bianchi dal documento XML se il client è Mozilla, myPath realizza fuzionalità XPATH e loadXMLDoc carica un documento XML.
codice:
<script type="text/javascript">
function ajaxRequest(func, src, type) {
var mozillaFlag = false;
var XMLHttpRequestObject = false;
if (window.XMLHttpRequest) {
XMLHttpRequestObject = new XMLHttpRequest();
//XMLHttpRequestObject.overrideMimeType("text/xml");
mozillaFlag = true;
} else if (window.ActiveXObject) {
XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
}
if(XMLHttpRequestObject) {
XMLHttpRequestObject.open(type, src, true);
XMLHttpRequestObject.onreadystatechange = function(){
if (XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200) {
var xmlDocument = XMLHttpRequestObject.responseXML;
if(mozillaFlag){
removeWhitespace(xmlDocument);
}
unaFunzione(xmlDocument);
}
}
XMLHttpRequestObject.send(null);
}
}
function unaFunzione(xml){
var a = new Array();
var b = new Array();
var user = "mariano";
var xml_qc = loadXMLDoc("xml/quest_completati.jsp");
a = myPath(xml, "/questionari/questionario[@username='"+user+"']/@data");
b = myPath(xml_qc, "/questionari/questionario[@username='"+user+"']/@data");
document.write("stampa di a.length, xml ottenuto con ajaxRequest: "+a.length);
document.write("
stampa di b.length, xml ottenuto con loadXMLDoc: "+b.length);
document.write("
Mozilla stampa in entrambe i casi il numero 28.");
document.write("
IE7 solo nel secondo caso stampa il numero 28, altrimenti stampa 0.");
}
function myPath(xml, path) {
var array = new Array();
if (window.ActiveXObject)
{
xml.setProperty("SelectionLanguage","XPath");
var nodes=xml.selectNodes(path);
for (i=0;i<nodes.length;i++)
{
array[i] = nodes[i].childNodes[0].nodeValue;
}
}
// code for Mozilla, Firefox, Opera, etc.
else if (document.implementation && document.implementation.createDocument)
{
var nodes=document.evaluate(path, xml, null, XPathResult.ANY_TYPE,null);
var result=nodes.iterateNext();
var j=0;
while (result)
{
array[j] = result.childNodes[0].nodeValue;
result=nodes.iterateNext();
j++;
}
}
return array;
}
function removeWhitespace(xml) {
var loopIndex;
for (loopIndex = 0; loopIndex < xml.childNodes.length; loopIndex++) {
var currentNode = xml.childNodes[loopIndex];
if (currentNode.nodeType == 1) {
removeWhitespace(currentNode);
}
if (((/^\s+$/.test(currentNode.nodeValue))) && (currentNode.nodeType == 3)) {
xml.removeChild(xml.childNodes[loopIndex--]);
}
}
}
function loadXMLDoc(fname) {
var xmlDoc;
if (window.ActiveXObject) { // Internet Explorer
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
} else if (document.implementation && document.implementation.createDocument) { // altri browser
xmlDoc=document.implementation.createDocument("","",null);
} else {
alert('Non puoi utilizzare questo script!!!');
}
xmlDoc.async=false;
xmlDoc.load(fname);
return(xmlDoc);
}
</script>
la funzione unaFunzione è richiamata tramite ajaxRequest con un evento onload al body:
codice:
<body onload="ajaxRequest('unaFunzione', 'xml/q.xml', 'POST');">
ad essa viene passato un documento XML, su tale documento, effettuo delle query con myPath, ma queste fuzionano solo con mozilla, se invece il documento XML lo carico con loadXMLDoc il mypath funziona sia su ie che su mozilla.
Cosa c'è che nn va in ajaxRequest???
Ho caricato un esempio su un mio spazio online se qualcuno vuole vederlo mi può mandare un privato!!!