2016-12-15 5 views
0

У меня есть цикл, где я загружаю json-объект, и хочу, чтобы данные из json-файла отображались на моей карте листовка в реальном времени. Когда я добавляю значения в json-файле, jsonData.length покажет мне обновленную длину, но цикл не увеличивает значение переменной j. Как можно увеличить значение переменной j после добавления новых значений в json-файл?Бесконечный цикл не работает

function Loop() { 
    setTimeout(function() { 
     load_js(); 
     jsonData=loadJSON(); //load JSON Data 

     lat = jsonData[j]; 
     lon = jsonData[j+1]; 

     var id = Math.floor((Math.random() * 2) + 1); 
     jdl = jsonData.length; 
     mapUpdater("" + id, lat, lon); 


     if (j < jsonData.length) { 
      j=j+2; 
     } 

     Loop(); 

    }, 1000) 
} 
+4

вместо рекурсивной функции просто использовать setInterval –

+1

Прежде всего вы должны вызвать функцию , Вы должны поместить 'Loop();' вне функции. –

+0

Технически бесконечный цикл работает. – Roberrrt

ответ

1

Спасибо за помощь. Возможно, я недостаточно подробно изложил свою проблему.

Я нашел проблему самостоятельно. Я думаю, что условие было проблемой.

Я думаю, что массив был вне пределов досягаемости. Ответ на этот вопрос был такой:

Я изменил это:

if (j < jsonData.length) { 
      j=j+2; 
     } 

к этому:

if (j < jsonData.length-2) { 
      j=j+2; 
     } 
1

Вам необходимо изменить область действия j. Или вы можете добавить j в аргумент функции Loop.

function Loop(j) { 
    if (j === undefined) 
    j = 0; 
    setTimeout(function() { 

    load_js(); 
    jsonData = loadJSON(); //load JSON Data 

    lat = jsonData[j]; 
    lon = jsonData[j + 1]; 

    var id = Math.floor((Math.random() * 2) + 1); 
    jdl = jsonData.length; 
    mapUpdater("" + id, lat, lon); 


    if (j < jsonData.length) { 
     j = j + 2; 
    } 

    Loop(j); 

    }, 1000) 
} 
Loop(); 
+0

'if (! J)' {} будет быстрее. – Roberrrt

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