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, время: 01:36. |