¿Cuáles son los mejores métodos para insertar bloques de HTML y Javascript en el DOM después de una solicitud AJAX?

Si está utilizando JavaScript vainilla, puede construir sus componentes DOM en la memoria usando document.createElement. En la mayoría de los casos, no escribirá HTML en JavaScript; en su lugar, creará elementos y los agregará al DOM.

Aquí hay un ejemplo de cómo puede agregar texto a su página usando este método:

var p = document.createElement (‘p’); // crea un elemento

p.textContent = ‘¡Hola, mundo!’; //

¡Hola mundo!

p.className = ‘mi-clase’; //

¡Hola mundo!

// agrega nuestro elemento

al final del cuerpo
document.body.appendChild (p);

Puede agregar estos elementos a cualquier nodo DOM, no solo al cuerpo:

// selecciona un elemento para agregar
var myElement = document.querySelector (‘. my-element’);

// agregue nuestro elemento

al final de .my-element
myElement.appendChild (p);

Si necesita hacer algo más complicado que un simple elemento, se considera una mejor práctica construirlo en un DocumentFragment y luego agregarlo al DOM existente.

Entonces, eso es vanilla JS. Sin embargo, si está utilizando jQuery, puede escribir HTML en una cadena y jQuery lo convertirá en DOM por usted. Esta es una buena opción si no te sientes cómodo usando la API DOM.

var html = ‘

¡Hola mundo!

‘;
elemento var = $ (html);
$ (‘cuerpo’). append (elemento);

Usando cualquiera de estos métodos, no es necesario incrustar su JavaScript en el HTML. Simplemente puede ejecutarlo en el mismo lugar donde agrega elementos al DOM.

Esto realmente se reduce a su objetivo al hacer la solicitud AJAX y lo que el servidor de destino está enviando de vuelta en términos de datos.

¿Está recuperando un bloque de HTML de la solicitud de AJAX?

Si es así, me inclino a pensar que el servidor no está haciendo su trabajo. Siendo realistas, todo lo que debería estar enviando son datos que pueden usarse para ayudar a construir el DOM. Si esto está bajo su control, recomendaría renovar su código de manera que solo envíe la URL necesaria a la fuente de su inserción.

A pesar de eso, en este caso no veo ningún problema al usar innerHTML para inyectar esto en el DOM. Dicho esto, no debería enviar etiquetas de script absoluto; esto está creando una apertura muy explotable para XSS como un vector de ataque en su sitio.

¿Estás volviendo solo a la fuente de inserción?

Si este es el caso, ¿por qué no simplemente crear una inserción en blanco en la página (o una con un destino inicial fijo) y luego, cuando se realiza la llamada AJAX, simplemente cambia la fuente de la inserción actual y ejecuta JavaScript en consecuencia? Por ejemplo:

En tu HTML

En tu JavaScript

// jQuery perezoso para solicitud GET = p

$ .get (‘destino / url / aquí’, función (datos) {
// data.newSrc es donde está el nuevo src que queremos implementar
document.getElementById (‘jugador’). src = data.newSrc;
// apunte su elemento de inserción con otro JS aquí
});

En este ejemplo, la página viene con un elemento incrustado precargado y lleno con la fuente inicial, pero cuando un usuario realiza una acción, cambiamos el src con lo que sea que provenga de la solicitud y, en el mismo contexto, realizamos cualquier otra cosa que estuviéramos haciendo originalmente en un etiqueta de script De esta manera, no intentamos insertar etiquetas de script una y otra vez (una tarea peligrosa y cuestionable en el mejor de los casos) y en su lugar ejecutamos JavaScript conocido que está bajo el alcance de nuestra página, no del servidor.