Newsgroup: it.comp.lang.javascript
Titolo: Curiosità: ottenere l'oggetto XMLHTTPRequest

Ciao a tutti,
	rivedendo il codice che utilizzo per AJAX ho notato che, negli anni, ho 
effettuato alcune modifiche di cui non sempre ricordo la motivazione ;-)
Inizialmente la funzione che impiegavo per istanziare XMLHttpRequest 
usava questo codice (se non ricordo male suggerito da Zero sulle FAQ del 
ng, almeno 5-6 anni fa):
if (window.ActiveXObject) {
    /*@cc_on
	@if (@_win32)
      		return new ActiveXObject("Microsoft.XMLHTTP");
	@end
    @*/
    return null;
   }
else if (window.XMLHttpRequest)
    return new XMLHttpRequest();
Poi l'ho sostituito con (più o meno) questo:
try { return new XMLHttpRequest() }
catch (e) {
   try { return new ActiveXObject('Msxml2.XMLHTTP') }
      catch (e)
         { return new ActiveXObject('Microsoft.XMLHTTP') }
   }
E infine, a causa di alcuni comportamenti anomali con le diverse 
versioni di IE su diverse versioni di windows (seguendo le indicazioni 
di MSDN), con questo:
if (window.ActiveXObject) {
    try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); } catch (e) {}
    try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); } catch (e) {}
    try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
    return null;
} else if (window.XMLHttpRequest) {
   return new window.XMLHttpRequest();
}
Ora, trascurando le differenze sintattiche (if al posto di try o 
viceversa), visto che di fatto vedo che tutte e tre le soluzioni 
funzionano nel 99.9% dei casi, mi(vi) chiedo:
qual è il sistema ad oggi migliore per istanziare l'oggetto?
Con "migliore" mi riferisco (nell'ordine) a: supporto da parte dei vari 
browser, aggiornamento/stabilità delle librerie (dll o ActiveX) 
utilizzate e velocità di esecuzione.
Come anticipavo è solo una curiosità: realizzando applicazioni intranet 
posso "imporre" il browser che preferisco e, quando devo usare 
JavaScript più massicciamente di solito mi appoggio a frameworks esterni 
(che a quanto vedo usano un codice molto simile al secondo che ho citato).
Ringrazio anticipatamente chi avesse tempo e voglia di rispondermi! :-)
Paolo
P.S.: ma le FAQ online esistono ancora?

     return new XMLHttpRequest();
io uso una versione tipo questa, occorre semplicemente scambiare le due 
condizioni (prima verifica l'esistenza dell'oggetto, poi activex), perché 
le versioni recenti di IE hanno l'oggetto.

 P.S.: ma le FAQ online esistono ancora?
Immagino di si! Se ti riferisci al sito di Cristiano:
http://www.criosoftware.it/default36.aspx
-- 
"When you have eliminated the impossible, whatever remains, however
improbable, must be the truth."

 
http://www.criosoftware.it/default36.aspx
Sì, ieri quando ho provato il sito non rispondeva.
Grazie di tutto!
Alla prossima

 
http://www.criosoftware.it/default36.aspx
Faq? Non ho mai considerato quelle delle Faq del newsgroup, erano 
"esperimenti" di 
asp.net
 ... Comunque sì, ci si arriva ancora da 
 
http://www.criosoftware.it/defaultBak.aspx
Ciao caro!

 le versioni recenti di IE hanno l'oggetto.
Grazie Cristiano, ora valuto un po' il compromesso che mi sembra 
migliore (in funzione dei browser che mi interessano).
Nel frattempo mi son guardato un po' cosa fanno i vari framework e vedo 
che nel 99% dei casi usano una sfilza di try.
Ad esempio prototype:
try { return new XMLHttpRequest(); } catch(){}
try { return new ActiveXObject('Msxml2.XMLHTTP.6.0'); } catch(){}
... e via con tutti gli altri ActiveX ...
Quasi lo stesso con midori e mootools (quelli che uso di solito).
JQuery fa un "giro" appena un po' diverso:
if ( window.ActiveXObject ) {
   jQuery.ajaxSettings.xhr = function() {
   //Microsoft failed to properly implement the XMLHttpRequest in
   // IE7 (can't request local files)
     if ( window.location.protocol !== "file:" ) {
       try { return new window.XMLHttpRequest(); } catch(xhrError) {}
     }
     try {
       return new window.ActiveXObject("Microsoft.XMLHTTP");
     } catch(activeError) {}
   };
}
Comunque, come dicevo, era una mia curiosità personale, non un'esigenza 
concreta :-)
Grazie ancora!

 Alla prossima
Alla prossima


 Ciao caro!
Ciao a te! Spero tutto bene nella "famigliona" :)


 JQuery fa un "giro" appena un po' diverso:
Ecco, l'approccio di jQuery è quello che più mi garba tra quelli che hai
detto. Tiene di conto anche il protocollo file.


 Ciao a te! Spero tutto bene nella "famigliona" :)
yes! La bimba cresce (ha scoperto da poco di avere un "pugno destro", e 
così ultimamente cerca di infilarselo tutto in bocca, con inevitabili 
conati ... che storia vederla capire pian piano "che cosa è lei", lo si 
dà per scontato, ma scontato non è!)
Prima o poi passerai da queste parti, così te la presento!

 è minimale - come in questo caso.
Chiaro.
Direi che mi hai ragionevolmente convinto.
Mi resta qualche dubbio su tutte le versioni di quell'activeX, suggerite 
da MS stessa, di cui sto tentando di capire il senso e, soprattutto, le 
differenze tra versioni.
Grazie ancora! ;-)

 Grazie ancora! ;-)
Prego!


 Prima o poi passerai da queste parti, così te la presento!
Eh caro, la veggo buia! Ma ci proverò. :)


 E il "pugno sinistro" lo deve ancora scoprire o ci è già passata..? :)
Eh ... il sinistro è lontanissimo dai suoi pensieri per ora ... ma 
crescerà, e crescerà bene! :-)

 ampio margine di retrocompatibilità - ed è comunque usato solo su IE<  7.
Sì, l'avevo visto già un po' di tempo fa.
Di fatto era uno degli articoli che mi avevano fatto sorgere qualche 
dubbio, visto che fino a pochi anni fa anch'io usavo semplicemente 
"Microsoft.XMLHTTP" senza preoccuparmi troppo di versioni e menate 
varie. Cosa che presumibilmente ricomincerò a fare ;-)