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?

È stato utile?

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 ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top