2013-08-21 2 views
0

У меня есть данный набор элементов для обработки; каждый элемент должен дождаться завершения предыдущего.В Javascript список процессов синхронно

По совокупности элементов я имею в виду массив целых значений.

«Обработка» Я имею в виду сделать POST на HTTP-сервер, передавая целочисленное значение каждого элемента массива.

Я нашел что-то похожее на waht, которое я ищу: doSynchronousLoop.js, но мне интересно, есть ли альтернативы.

+2

Какие коллекции - Как вы посылаете коллекции - Кто обрабатывает коллекции? –

+0

Может ли сайт приостановить рендеринг во время обработки? Если да, просто выполните запрос ajax «synchronus» – tobspr

+0

@TobSpr Это смешно, что если сервер «внезапно станет быстрее»? Если он не использует только 2 сборника, то, думаю, все будет хорошо –

ответ

3

Если ваш сайт может приостановить оказание при выполнении запросов, вот решение с jQuery:

// process 5 items 
for (var i = 0; i< 5; i++) { 
    // ajax request done with jquery 
    $.ajax({ 
     async: false, /* this makes it execute synchronously */ 
     url: "the url to handle item #i", 
     type: "POST", 
     success: function(msg) { 
      // process data for item #i 
     } 
    }) 
} 

Edit: вы можете решить асинхронно, тоже:

items = [put your items here] 
current_item = 0 

function processItem() { 
    if (current_item == items.length) { 
     // list processing finished 
     return; 
    } 

    $.ajax({ 
     async: true, 
     url: "the url to handle item #current_item", 
     type: "POST", 
     success: function(msg) { 
      // process data for item #current_item 
      processItem(); 
      current_item++; 
     } 
    }) 

} 

Не пропустите, чтобы поместить переменные в область видимости, я просто оставил их в глобальной области видимости, чтобы сделать этот пример более понятным.

Смотрите также документы: jQuery.ajax

+2

Не нужно делать синхронные запросы AJAX (поскольку они будут просто запросами JAX). Используйте функцию обратного вызова, которая выталкивает последний элемент из вашего массива элементов и вызывает себя, когда это делается. – Blender

+0

Я изменил ответ – tobspr

+2

Это больше похоже на – Blender

Смежные вопросы