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:
Se você está usando
jQuery.ajax()
chama, todos eles têm odone
/fail
/always
callbacks que você pode usar para notificar alguma outra função que eles tenham feito (se você não estiver usandojQuery.ajax
, em seguida, localize o gancho / callback relevante e ajuste o exemplo de código abaixo de acordo).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
}
}
}