xhr open example ejemplo ajax xmlhttprequest

ajax - open - xmlhttprequest json



¿Reutilizar el objeto XMLHttpRequest o crear uno nuevo? (3)

Busqué stackoverflow pero obtuve respuestas contradictorias:

¿Por qué debería reutilizar los objetos XmlHttpRequest?

Página intensiva de Ajax: ¿reutilizar el mismo objeto XMLHttpRequest o crear uno nuevo cada vez?

Además, hay una recomendación en w3schools.com:

Si tiene más de una tarea AJAX en su sitio web, debe crear UNA función estándar para crear el objeto XMLHttpRequest y llamar esto para cada tarea AJAX.

¿Por qué esta recomendación? En su lugar, estoy usando un objeto global XMLHttpRequest en mi página para manejar todas las tareas de Ajax.


La recomendación que resalta es que debe tener una FUNCIÓN que maneje AJAX, en lugar de específicamente un objeto XMLHTTPRequest.

Yo usaría uno diferente para cada pregunta.

El argumento común en contra de esto se refiere a los gastos generales involucrados en la configuración de XHR. Sin embargo, esto va a ser bastante despreciable en cualquier sitio que utilice AJAX como estaba previsto (es decir, no como un sustituto laboral de los sockets web) y, en cualquier caso, se aplicarían muchos de los mismos gastos generales con la reutilización de un XHR. Todavía tendría que abrir la conexión, dispararla, conectar oyentes, etc.

Los navegadores varían en términos de cuántas puertas de enlace de conexión se permiten en un momento dado, por lo que depende del navegador controlar qué XHR puede hacer qué. En otras palabras, no tiene que preocuparse por la gestión de este aspecto.

Finalmente, no hay nada que le impida borrar manualmente los XHR después de que los haya utilizado, siempre que sean eliminables (propiedades de un objeto en lugar de variables).


Lo mejor es usar diferentes objetos para cada XHR que esté haciendo. Incluso si hay una forma de hacerlo, ¡evítalo! No hay problema con la creación de un nuevo objeto para cada solicitud. Si le preocupa la pérdida de memoria o algo por el estilo, no se preocupe, todos están apropiadamente GC.

Si tiene más de una tarea AJAX en su sitio web, debe crear UNA función estándar para crear el objeto XMLHttpRequest y llamar esto para cada tarea AJAX.

En realidad, significa que tiene una función que crea un nuevo objeto y lo devuelve cada vez que lo llama. Algo así como:

function newXHR(){ return a new instance of XHR(); }


Usted no entendió la recomendación de W3School. Destacaré la parte relevante:

Si tiene más de una tarea AJAX en su sitio web, debe crear UNA función estándar para crear el objeto XMLHttpRequest y llamarla para cada tarea AJAX.

Dice que usa una función AJAX para obtener solicitudes. Esta función se ocupará de las incoherencias entre IE y otros navegadores. XMLHttpRequest en navegadores compatibles con estándares y ActiveXObject en IE.

Recomiendo usar múltiples objetos XHR. Con un objeto xhr global, su aplicación solo puede tratar con una solicitud en un momento determinado. También es propenso a errores (por ejemplo, XMLHttpRequest se inicia varias veces sin iniciar la función onreadystatechange ).

W3schools significaba algo así como:

function createXHR() { try { return new XMLHttpRequest(); } catch (e) { try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { return new ActiveXObject("Msxml2.XMLHTTP"); } } } var xhr = createXHR(); xhr.open(''get'', ''/test'', true); xhr.send();

Aunque es mejor crear una función que maneje solicitudes, como jQuery.ajax .