Best practice per il rilevamento del supporto AJAX / XmlHttpRequest
-
08-07-2019 - |
Domanda
Sto cercando di aggiornare una vecchia funzione JavaScript utilizzata per rilevare il supporto per AJAX (ovvero l'oggetto XmlHttpRequest). Ho cercato online (incluso SO) e ho trovato varie soluzioni, ma non sono sicuro di quale sia il più efficace per rilevare semplicemente il supporto.
La funzione corrente è:
function IsSyncAJAXSupported()
{
var isSyncAJAXSupported = true;
var xmlHttp = null;
var clsids = ["Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"];
for(var i=0; i<clsids.length && xmlHttp == null; i++) {
try {
xmlHttp = new ActiveXObject(clsids[i]);
} catch(e){}
}
if(xmlHttp == null && MS.Browser.isIE)
{
isSyncAJAXSupported = false;
}
return isSyncAJAXSupported;
}
In Firefox 3, quanto sopra fornisce errori perché MS non è definito.
Mi rendo conto che usare una libreria sarebbe meglio ma che non è un'opzione a breve termine. Supportiamo solo IE6 e versioni successive + di Firefox, Safari / WebKit e Opera.
Qual è il modo migliore per ottenere un vero / falso per il supporto XmlHttpRequest?
Soluzione 3
Ho pensato a questo:
var xhr = null;
try { xhr = new XMLHttpRequest(); } catch (e) {}
try { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
return (xhr!=null);
Sembra funzionare, quindi ho pensato di condividerlo.
Altri suggerimenti
Non
O meglio, non perdere tempo a fare ciò che molte altre persone hanno fatto meglio.
Prova ad afferrare la fonte di jQuery o somesuch e " prestiti " i loro metodi; hanno già investito il tempo per supportare il maggior numero possibile di browser (specialmente vero nel caso di jQuery), quindi risparmia tempo.
HTH
Il mio codice preferito per questo è:
function CreateXMLHttpRequest()
{
// Firefox and others
try { return new XMLHttpRequest(); } catch (e) {}
// Internet Explorer
try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
//alert("XMLHttpRequest not supported");
// No luck!
return null;
}
Puoi facilmente aggiungere test per varianti di oggetti Microsoft ...