Как передать значение i в function чтобы после того как пришел результат для конкретной итерации можна было сохранить результат для конкретного запроса?
var points = [];
var result = [];
for (var i = 0; i < points.length; i++) {
$.get('do-get', {apikey: 'key', values: points[i].join('|')}, function (data) {
result[i] = data; // ответы приходят в ином порядке чем уходят запросы
});
}
так?
var points = [];
var result = [];
for (var i = 0; i < points.length; i++) {
(function(i){
$.get('do-get', {apikey: 'key', values: points[i].join('|')}, function (data) {
result[i] = data;
});
})(i);
}
Кстати, итоговый result все равно нужно будет где-то просматривать и работать. По очевидным причинам после цикла никак этого сделать нельзя, потому что запросы ajax асинхронные... Выхода из этого может быть несколько, от глупых, до еще более глупых))
Например внутри callback проверять чему равно i и если оно равно points.length работать с финальным массивом:
...
...
$.get('do-get', {apikey: 'key', values: points[i].join('|')}, function (data) {
result[i] = data;
if (i == points.length)
finalFunction(result);
});
...
...
function finalFunction(resArr) {
console.log("тут работа с result ");
}
Может быть сделать массив ajax запросов и воспользоваться функцией jQuery.when(), с помощью которой можно дождаться выполнения всех асинхронных запросов. Пример:
var points = [];
var result = [];
var ajaxArr = [];
for (var i = 0; i < points.length; i++) {
ajaxArr[i] = ajaxFunction(i);
}
$.when(...ajaxArr).done(function(...test){
// в test будут все запросы по всем ajaxArr
console.log(test);
// запихнем в result данные
for (var el in test) {
result.push(test[el][0]);
}
console.log(result);
});
function ajaxFunction(i) {
return $.ajax({
url: "do-get",
method: "GET",
dataType: "json",
data: {apikey: 'key', values: points[i].join('|')}
});
}
Может быть не стоит это делать в цикле?
А еще должно работать с let
var points = [];
var result = [];
for (let i = 0; i < points.length; i++) {
$.get('do-get', {apikey: 'key', values: points[i].join('|')}, function (data) {
result[i] = data;
});
}
var points = [];
var result = [];
for (var i = 0; i < points.length; i++) {
var context = { index: i };
$.get('do-get', {apikey: 'key', values: points[i].join('|')}, (function (data) {
result[this.index] = data;
}).bind(context));
}
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости