Load - как дождаться загрузки
Здравствуйте,
$("#block").load("/block1.html");
$("#block2").load("/block2.html");
Подскажите как дождаться загрузки 2-х и более вызовов load, и по окончанию загрузки всех блоков сделать какое то действие например alert? |
Zhazhah,завести переменную например x = 0;
в каждом load в callback делать подсчёт if(удачная загрузка) x++ ;if (x ==2) всё загружено |
Зачем делать два запроса когда можно загрузить все одним?
|
рони спешл фор ю:
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
var requestCounter = 0;
function fakeAjax(delay) {
var n = ++requestCounter;
var deferred = new $.Deferred();
setTimeout(function() {
$('body').append($('<div>', {text: 'Request ' + n + ' completed in ' + delay + ' ms. '}));
deferred.resolve();
}, delay);
return deferred;
}
var promises = [
fakeAjax(3000),
fakeAjax(500),
fakeAjax(1000),
];
$.when.apply($, promises).then(function() {
$('body').append($('<div>', {text: 'All requests completed'}));
});
</script>
|
Цитата:
|
1) $.ajax() возвращает интересный объект. Так называемый promise (обещание), в терминологии jQuery - deferred (отложенный).
У промисов есть методы .fail(), .done(), .then() 2) $.when позволяет подождать когда выполнятся все обещания и выполнить некий код. При этом функция также дает нам "обещание". То есть обещает что все обещания выполнятся. $.when(promise1, promise2, ... promisen).then(все_обещания_выполнены); 3) Так как наши обещания (о завершении ajax-запросов) в массивчике, то юзаем Function.appy чтоб передать его как аргументы: $.when.apply(jQuery, promises) |
Так понятнее?
$.when( $.ajax('1.php'), $.ajax('2.php') ).then(function() { alert('Всё') })
|
danik.js,
спасибо :( буду конечно знать что так можно, но пока без понятия. как там внутри что за счёт чего срабатывает тёмный лес. |
| Часовой пояс GMT +3, время: 21:32. |