2016-02-08 4 views
1

У меня есть код Coffeescript, работающий в playframework, который строит таблицу на основе нескольких запросов AJAX.Последовательный заказ результатов Ajax

$ -> 
    $.get "/queues", (queues) -> 
     $.each queues, (index, queue) -> 
      $.get "/queue/" + queue, (html) -> 
       $("#queues").append $("<tr>").html html 

/queues возвращает список имен очередей.
/queue/name возвращает HTML, описывающий очередь name.
#queues - таблица, где я показываю это описание.

Все это работает нормально, но поскольку запросы асинхронны, вызовы append выполняются в другом порядке каждый раз, что означает, что содержимое таблицы произвольно переупорядочивается каждый раз, когда выполняется запрос. Поскольку это обеспечивает текущий статус динамического, запрос запускается каждые три секунды.

Что такое хороший способ отображения строк в последовательном порядке каждый раз? У меня есть index, поэтому я могу попробовать добавить данные в эту строку, но если третий запрос вернется первым, добавив его в третий ряд, он не будет работать хорошо.

У меня нет сильного предпочтения в отношении того, как выполняется заказ, просто чтобы он был согласован с несколькими нагрузками.

ответ

0

Одним из вариантов было бы заставить запросы быть последовательными. Например, определить рекурсивную функцию, чтобы получить результаты одного запроса, прежде чем сделать следующий:

do_queue = (index, queues) -> 
    if index >= queues.length then return 
    queue = queues[index] 
    $.get "/queue/" + queue, (html) -> 
     $("#queues").append $("<tr>").html html 
     do_queue(index+1, queue) 

Затем вызовите его следующим образом:

$ -> 
    $.get "/queues", (queues) -> 
     do_queue(0, queues) 
+0

Отлично. Это делает то, что мне нужно. –

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