Mi sitio usaba jquery.load()
para navegar en una gran parte de la página. Realmente aprecio la capacidad de solamente incluir sólo una parte particular del contenido cargado, aquí el div con id = "content":Las secuencias de comandos que se ejecutan en jquery.ajax() páginas cargadas ejecutan document.ready demasiado pronto
$(frame_selector).load(url +" #content", function(response, status, xhr) {...});
Pero ahora tengo que ser capaz de ejecutar secuencias de comandos que forman parte de las páginas siendo cargado dinámicamente Jquery.load()
elimina estas secuencias de comandos, pero jquery.ajax()
no. Así que duplicó la funcionalidad parcial del contenido de jquery.load
en una llamada AJAX como tal:
$.ajax({
url: url,
dataType: 'html',
success: function(data, textStatus, XMLHttpRequest) {
// Only include the response within the #content id element.
$(frame_selector).html(jQuery("<div>")
.append(data)
.find("#content")
);
}
});
El problema es que los scripts que se están cargando dinámicamente de la llamada AJAX no se están ejecutando de forma fiable. A veces no parecen tener ningún efecto, tal vez porque se están ejecutando demasiado pronto. Los scripts solo hacen manipulación de DOM en jquery, sin depender de imágenes o flash ni nada que no se haya cargado aún. Para evitar quedar atascado, tengo este truco horrible para que las cosas funcionen. En lugar de la secuencia de comandos cargado en AJAX simplemente usando:
$(document).ready(function() {...}); // unreliable
tardo los 200 ms antes de ejecutar secuencias de comandos:
$(document).ready(window.setTimeout(function() {...}, 200)); // HATE THIS
Alguien sabe cómo puedo hacer que esto funcione de forma fiable y sin codificación dura de un retraso? Supongo que es una condición de carrera entre el <script>
y mi lógica cargar #content
en un nuevo div, pero no estoy seguro de qué hacer al respecto.
Puede realizar solicitudes sincrónicas para capturar datos. – dz1984
Esa es una idea horrible. La IU del navegador se bloqueará mientras se ejecutan las solicitudes sincrónicas. –