/ / Existe document.ready equivalente para a página com seções carregadas AJAX? - javascript, jquery

Existe document.ready equivalente para a página com seções carregadas AJAX? - javascript, jquery

Eu tenho uma página principal contendo um número de seções. Cada uma dessas seções define um evento (document) .ready, chamando uma função. A função é única e definida dentro da própria seção. Por exemplo.

Main.htm

section1: define o funcABC (). (documento) .ready chama funcABC ();

section2: define funcDEF (). (documento) .ready chama funcDEF ();

section3: define funcXYZ (). (document) .ready chama funcXYZ ();

etc ..

Portanto, a página é carregada e cada seção chama a função necessária e tudo funciona.

A página foi agora alterada para carregar oseções via AJAX (jquery.load ()). O layout mostrado acima não funciona mais como (documento). O ready só é acionado quando o arquivo Main.htm é carregado, mas as seções não são carregadas.

Main.htm não pode chamar as funções nas seções, pois não sabe quais são as necessidades de cada seção e não possui as definições (que são geradas dinamicamente em cada seção).

Eu sei que o design é estranho, é algo que eu herdei e tenho que trabalhar.

Eu basicamente preciso de cada seção para sua própria função depois que ela carrega, como estava fazendo. Como posso fazer isso funcionar?

Respostas:

1 para resposta № 1

(document).ready é um manipulador para o evento quando você carrega o DOM,no entanto, você aciona alguns eventos AJAX e deseja executar uma função quando o evento é concluído com êxito. As funções executadas quando o servidor respondeu são chamadas de funções de retorno de chamada. Vamos supor que você tenha uma função como esta:

function() myFunction {
//...
}

você quer myFunction para ser executado como uma função de retorno de chamada. Vamos supor que você use um jquery.load, como isso:

$( "#result" ).load( "ajax/test.html", function() {
myFunction();
});

Este é um manipulador de eventos, que envia uma solicitação para "ajax/test.html" e quando a resposta chegou, executa uma função sem nome passada como parâmetro. Esta função sem nome chama myFunction.


0 para resposta № 2

Se bem entendi, você tem vários AJAXchamadas e gostaria de fazer alguma coisa depois de terem terminado. Isso não tem nada a ver com o jQuery (document) .ready () que está relacionado ao carregamento do DOM. É a lógica da sua aplicação.

Uma solução básica (um pouco ad-hoc) seria a seguinte:

  1. Se você está usando jQuery.ajax() chama, todos eles têm o done/fail/always callbacks que você pode usar para notificar alguma outra função que eles tenham feito (se você não estiver usando jQuery.ajax, em seguida, localize o gancho / callback relevante e ajuste o exemplo de código abaixo de acordo).

  2. Então você poderia fazer alguma coisa depois de 3 chamadas ajax terem terminado:

.

function ABC(){
$.ajax({url:"..."}).always(waitForThemToFinish);
}
function DEF(){
$.ajax({url:"..."}).always(waitForThemToFinish);
}
function GHI(){
$.ajax({url:"..."}).always(waitForThemToFinish);
}

var finished = 0;
function waitForThemToFinish(){
if (finished < 3) { // To ensure that the operation below is called only once
finished++;
if (finished >= 3) {
// do something after some 3 ajax calls have finished
}
}
}