Pregunta

Tengo una pequeña función JS que hace Ajax para mí y otro similar que se suma a PUBLICAR datos en la solicitud.Con Ajax ser un gran tema con tantas bibliotecas sobre ella, lo que me estoy perdiendo de mi función, es inseguro o algo preocupante?

function loadPage(pagePath, displayElement)
{
    var xmlHttp;

    try
    {
        // Firefox, Opera 8.0+, Safari
        xmlHttp=new XMLHttpRequest();
    }
    catch (e)
    {
        // Internet Explorer
        try
        {
            xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e)
        {
            try
            {
                xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch (e)
            {
                alert("Your browser does not support AJAX!");
                return false;
            }
        }
    }

    xmlHttp.onreadystatechange=function()
    {
        if(xmlHttp.readyState==4)
        {
            document.getElementById(displayElement).innerHTML = xmlHttp.responseText;
        }
    }

    xmlHttp.open("GET", pagePath, true);
    xmlHttp.send(null);
}
¿Fue útil?

Solución

Te recomiendo que no ruede su propio código de Ajax.En su lugar, utilizar un framework como Prototype, Dojo, o cualquiera de los otros.Ellos han tomado el cuidado del manejo de todos los ReadyStates no estás de manejo (2 significa que ha sido enviado, 3 significa que está en proceso, etc.), y que debe escapar de la respuesta que usted está consiguiendo así que usted no inserte potencialmente inseguros javascript o algo en tu página.

Otra cosa que un marco más sólido dará a usted la habilidad para hacer algo más que sólo usar innerHTML para reemplazar elementos en el DOM.Su función aquí sólo puede ser usado para reemplazar un elemento con la respuesta de la llamada ajax.Hay mucho más que se puede hacer con Ajax.

Otros consejos

Me gustaría quitar esta línea.

alert("Your browser does not support AJAX!")

Gritando en el usuario en un idioma que no se entiende es peor que el fracaso.:-)

Nunca he sido un fan de anidado bloques try/catch, así que me gustaría hacer algo como:

var xmlHttp;
if (window.XMLHttpRequest) {
  // Firefox, Opera 8.0+, Safari
  xmlHttp=new XMLHttpRequest();
} else if (window.ActiveXObject) {
  try {
    xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
    xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
}

if (xmlHttp) {
  // No errors, do whatever you need.
}

Creo que va a funcionar.Pero como se ha mencionado antes - ¿por qué reinventar la rueda, el uso de una biblioteca.Incluso mejor averiguar cómo lo hacen.

jQuery es probablemente uno de los más ligeros de bibliotecas populares hacia fuera allí.

Lo mismo en el prototipo:

function loadPage(pagePath, displayElement) {
    new Ajax.Updater(displayElement, pagePath);
}

Ajax.Actualizador en el Prototipo de la API

Si usted realmente quiere ver lo que te falta, leer el jQuery o Prototype código fuente para su ajax rutinas.Si hay números de fallo en los comentarios, bueno así.

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