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