Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Ajax запрос после выполнения всех итераций цикла (https://javascript.ru/forum/jquery/43062-ajax-zapros-posle-vypolneniya-vsekh-iteracijj-cikla.html)

Zhazhah 20.11.2013 12:25

Ajax запрос после выполнения всех итераций цикла
 
Здравствуйте, помогите пожалуйста с реализацией.

var fileList = $('#file_list');
$("#upload").click(function() {   
  fileList.find('li').each(function() {
    var item = this;
    // Здесь File API, каждая картинка отправляется на сервер
    // по отдельности, т.е каждая итерация это запрос

    // пример функции которая возвращает ответ от сервера.
   ...
    oncomplete: function(response) {
       $(item).removeClass('update').addClass('read');
       createPost();
    }
)};

function createPost() {
  if (!fileList.find('li').hasClass('update')) {
    // Последний запрос к серверу он должен выполниться только один раз.
  }
}


С первого взгляда все ок, но не ок, при большом кол-ве картинок происходит так что
if (!fileList.find('li').hasClass('update')) срабатывает не так как нужно...
Запрос на сервер отправляется больше одного раза

ksa 20.11.2013 13:21

Цитата:

Сообщение от Zhazhah
if (!fileList.find('li').hasClass('update')) срабатывает не так как нужно...

Он работает, как и написано в условии. :D Если тебе не так нужно - таки пиши как тебе действительно нужно...

Цитата:

Сообщение от Zhazhah
Запрос на сервер отправляется больше одного раза

Знать на тот момент в набор попадает более одного элемента...

Zhazhah 20.11.2013 14:04

Да именно, можно ли как то вызвать createPost после загрузки все картинок?
Что то ни чего в голову не идет

ksa 20.11.2013 14:20

Цитата:

Сообщение от Zhazhah
можно ли как то вызвать createPost после загрузки все картинок?

Да. :yes:
Ведь количество картинок всегда можно узнать. Так же можно определить индекс "очередной" картинки...
Останется сложить все воедино.

Zhazhah 20.11.2013 17:13

Почему то сразу не додумался, все очень просто)
Добавил в код:

var fileList = $('#file_list');
var itemCount = fileList.find('li').length;
var updateCount = 0;

$("#upload").click(function() {   
  fileList.find('li').each(function() {
    var item = this;
    // Здесь File API, каждая картинка отправляется на сервер
    // по отдельности, т.е каждая итерация это запрос

    // пример функции которая возвращает ответ от сервера.
   ...
    oncomplete: function(response) {
       updateCount++;
       $(item).removeClass('update').addClass('read');
       createPost();
    }
)};

function createPost() {
  if (!fileList.find('li').hasClass('update') &&
     updateCount == itemCount) {
    // Последний запрос к серверу он должен выполниться только один раз.
  }
}


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