Я извлекаю серию данных с сервера (геосервера) с использованием $ .ajax.Ajax loop and response order
The (упрощенный) запрос выглядит следующим образом:
var dataList=[];
//var urllist= // a list of several URLs to request data from
$.each(urllist,function(i) {
$.ajax({
jsonpCallback: 'getJson',
type: 'GET',
url: urllist[i],
dataType: 'jsonp',
success: function(data) {
dataList[i]=data.value;
}
})
});
Мне нужно написать к глобальным переменным dataList
, потому что мне нужно стрелять событие после того, как всех запросов urllist закончены. (У меня есть отсрочки, как so).
Проблема что готовый список всегда в другом порядке. Мне нужен результат в том же порядке, что и запросы.
Это может быть проблема закрытия, где индекс i
, который передается функции ajax и выделение dataList
, которое происходит в более поздней точке (когда каждый цикл перемещен). Я пробовал позаботиться об этом, как this, но проблема остается такой же. Также $.each
, как и в приведенном выше коде, в любом случае должно создать отдельное закрытие для каждой итерации.
Мне удалось реализовать recursive function, но его синхронно.
редактировать: suggested duplicate не имеет дела с зацикленной AJAX просит
Возможный дубликат [Как вернуть ответ от асинхронного вызова?] (Http://stackoverflow.com/questions/14220321/how-do-return-the-response-from-an-asynchronous-call) – Liam
* «Возможно, это проблема закрытия, где индекс ...» * Nope * «У меня есть отложенные функции, такие как« * uhm ... нет, не так ли? вам не хватает $ .when и возврата. и отложенный массив. –
Я добавил ответ с предложением, но теперь я внимательно прочитал, что вы хотите запустить событие, когда все запросы завершены, и это было неправильно, поэтому я удалил. – mrlew