2012-06-04 2 views
3

У меня есть канал JSON, который втягивается в каждое утверждение. То, что я хотел бы сделать, это цикл for var i Я хотел бы, чтобы это значение использовалось в каждом выражении. В приведенном ниже примере цикл for будет работать 0, 1, 2. Если i == 1, то я хотел бы запустить JSON-канал, но только для значения i = 1. В настоящее время, когда оператор if запускается, JSSON каждый оператор проходит через все элементы b/c, это значение i начинается с 0. Так что console.log у меня на месте возвращается 0, 1, 2. Я бы хотел, чтобы он возвращался только 1. Thank вы за любую помощь.Передать для параметра петли в каждое утверждение

EDIT
Мое внимание, чтобы сделать $.each(data.DATA, function(i, item) {i в этом каждое утверждение использовать число, которое i равно в течение цикла заявления. Поэтому, если в файле JSON есть 3 элемента, будет запущен только элемент 1.

for (var i = 0; i < 2; i++) { 
    if (i == 1) { 
     $.getJSON("/json/v2_ilt_map.cfm?feedtype=ILTMAP_SCHEDULED&customerID=1&TrainingObjectParent=3", {}, function(data, i) { 
      $.each(data.DATA, function(i, item) { 
       console.log(i); 
      } 
     }): 
    } 
}​ 

ответ

3

Вам потребуется ввести дополнительную функцию область, чтобы сделать эту работу.

function checkOnly(i) { 
    return function(data) { 
    $.each(data.DATA, function(ii, item) { 
     if (ii == i) console.log(ii); 
    }); 
    }; 
} 

for (var i = 0; i < 2; i++) { 
    if (i == 1) { 
     $.getJSON("/json/v2_ilt_map.cfm?feedtype=ILTMAP_SCHEDULED&customerID=1&TrainingObjectParent=3", {}, checkOnly(i)); 
    } 
} 

Здесь обратный вызов передается $.getJSON создается внутри другой функции. Таким образом, переменная «i», которая рассматривается в цикле .each(), представляет собой копию «i» из цикла for. Поэтому функция обработчика имеет фиксированное значение для сравнения.

+0

Это выглядит многообещающим. Дайте мне один момент, чтобы проверить. –

+0

@HelpInspireMe Это вариант общей проблемы. Тот факт, что область видимости JavaScript вводится только на уровне функции, является камнем преткновения для тех, которые используются для Java, C++ и т. Д. Однако, поскольку JavaScript имеет закрытие, которое действительно работает, это легко преодолеть. – Pointy

0
for (var i = 0; i < 2; i++) { 
    var x = i; 
    if (i == 1) { 
    $.getJSON("/json/v2_ilt_map.cfm?feedtype=ILTMAP_SCHEDULED&customerID=1&TrainingObjectParent=3", {}, function(data, i) { 
     $.each(data.DATA, function(n, item) { 
      if(n == x){ 
       console.log(n); 
       break;// you can use break if you want 
      } 
     } 
    }): 
    break; // you can use break if you want 
} 

}

+0

Это также не сработает. – Pointy

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