Pregunta

Estoy tratando de actualizar una antigua función de JavaScript utilizada para detectar la compatibilidad con AJAX (es decir, el objeto XmlHttpRequest). Busqué en línea (incluido SO) y encontré varias soluciones, pero no estoy seguro de cuál es la más eficiente para simplemente detectar el soporte.

La función actual es:

    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;
    }

En Firefox 3, lo anterior genera errores porque MS no está definida.

Me doy cuenta de que usar una biblioteca sería mejor, pero esa no es una opción a corto plazo. Solo admitimos IE6 y superior + versiones recientes de Firefox, Safari / WebKit y Opera.

¿Cuál es la mejor manera de obtener un verdadero / falso para el soporte XmlHttpRequest?

¿Fue útil?

Solución 3

Se me ocurrió esto:

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);

Parece funcionar, así que pensé en compartirlo.

Otros consejos

¡No lo hagas! ///strong>

O, mejor dicho, no pierdas el tiempo haciendo lo que muchas otras personas han hecho mejor.

Intente tomar la fuente de jQuery o somesuch y "pedir prestado" sus métodos ya han invertido el tiempo para admitir tantos navegadores como sea posible (especialmente cierto en el caso de jQuery), así que ahorre tiempo.

HTH

Mi código preferido para esto es:

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;
}

Puede agregar fácilmente pruebas para variantes de objetos de Microsoft ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top