Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Load - как дождаться загрузки (https://javascript.ru/forum/jquery/45467-load-kak-dozhdatsya-zagruzki.html)

Zhazhah 02.03.2014 12:21

Load - как дождаться загрузки
 
Здравствуйте,

$("#block").load("/block1.html");
$("#block2").load("/block2.html");

Подскажите как дождаться загрузки 2-х и более вызовов load, и по окончанию загрузки всех блоков сделать какое то действие например alert?

рони 02.03.2014 12:37

Zhazhah,завести переменную например x = 0;
в каждом load в callback делать подсчёт if(удачная загрузка) x++ ;if (x ==2) всё загружено

danik.js 03.03.2014 01:21

Зачем делать два запроса когда можно загрузить все одним?

danik.js 03.03.2014 01:37

рони спешл фор ю:

<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>

рони 03.03.2014 01:54

Цитата:

Сообщение от danik.js
рони спешл фор ю:

спасибо но я нихрена не понял.

danik.js 03.03.2014 02:06

1) $.ajax() возвращает интересный объект. Так называемый promise (обещание), в терминологии jQuery - deferred (отложенный).
У промисов есть методы .fail(), .done(), .then()
2) $.when позволяет подождать когда выполнятся все обещания и выполнить некий код. При этом функция также дает нам "обещание". То есть обещает что все обещания выполнятся.
$.when(promise1, promise2, ... promisen).then(все_обещания_выполнены);

3) Так как наши обещания (о завершении ajax-запросов) в массивчике, то юзаем Function.appy чтоб передать его как аргументы: $.when.apply(jQuery, promises)

danik.js 03.03.2014 02:09

Так понятнее?
$.when( $.ajax('1.php'), $.ajax('2.php') ).then(function() { alert('Всё') })

рони 03.03.2014 02:34

danik.js,
спасибо :( буду конечно знать что так можно, но пока без понятия. как там внутри что за счёт чего срабатывает тёмный лес.


Часовой пояс GMT +3, время: 01:36.