Как передать значение 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));
}
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Всех с наступающимРебята подскажите как сделать в пагинации 5 шагов в лево