Задать вопрос
MaksimSa
@MaksimSa
Ломаю стены

Как изменить данные с помощью цикла в jquery?

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

//Считываю количество строк таблицы
var sum = $('.serverlist').length;
console.log(sum);
//Вытаскиваю с помощью jQuery данные ip адресов
//Элементы в html имеют id = "ip1".."ip8"
for(var i=1; i<=sum; i++ ) {
    var ip = $("#ip"+i).html();
    var url = "http://mysite=" + ip;
    $.getJSON(url, function (json) {
        var onl = console.log(json.player_online);
        var max =console.log(json.player_max);
        console.log(i);
        $("#online"+i).text(onl + "/" +max);
    });
}

В консоли все отлично отображается и выводится, но я не могу изменить элемент "#online+i" потому что переменная "i" выдает либо success, либо 4.
Пробовал вписывать "i" во входные параметры функции, получалось так же.

Мне нужно, чтобы "i" в строке "$("#online"+i).text(onl + "/" +max);" принимала значение "i" из цикла. Но я не могу понять как это можно сделать.
  • Вопрос задан
  • 370 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Вам нужно сделать замыкание, чтобы работать с копией переменной, а не с ней самой, поскольку код внутри цикла выполняется после его завершения, когда переменная i имеет максимальное значение.
https://learn.javascript.ru/closures-usage#армия-ф...
Ответ написан
Комментировать
In4in
@In4in
°•× JavaScript Developer ^_^ ו°
Перемнные в цикле объявлять нельзя!
for(var i=1, ip, url; i<=sum; i++ ) {
    ip = $("#ip"+i).html();
    url = "http://mysite=" + ip;
    (function(b){
        $.getJSON(url, function (json) {
           console.log(json.player_online, json.player_max, b);
           $("#online"+b).text(onl + "/" +max);
        });
    })(i);
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы