O jQuery.when
método -jQuery é ótimo quando se trata de lidar com vários objetos adiados. Mas as coisas ficam complicadas quando há uma quantidade indeterminada deles. Imagine que você tem uma lista de URLs com comprimento variável, deseja fazer uma solicitação AJAX para cada URL e deseja fazer algo depois que todas as solicitações forem enviadas.
Portanto, você pode iterar essa lista de URLs e fazer as solicitações, mas não pode inserir objetos adiados no jQuery.when
método sucessivamente. Esta é uma situação horrível!
Mas existe uma maneira de gerenciar isso. Com a ajuda do .apply
-método:
// First we need an array to store the deferred objects
var dfds = [];
// After that we iterate over the list of URLs
for ( var i = 0, len = urls.length; i < len; i += 1 ) {
// Storing the deferred object returned by jQuery.get
dfds.push($.get(urls[i]);
}
// Passing the dfds-array to jQuery.when
$.when.apply($, dfds).done( /* your callback goes here * )
Isso é tudo. Dentro da função de retorno de chamada, todos os objetos de resposta das solicitações são passados como argumentos. Você pode, por exemplo, iterar sobre o arguments
objeto e obter os dados assíncronos.
Espero que essa dica ajude você! Se houver alguma dúvida, deixe um comentário.