Совет по циклам в массиве JSON
Доброго дня.
С java script столкнулся недавно, потому пока как в темном лесу. Нужен совет по реализации циклов на java script. То есть нужно обратится к массиву и если выполнено какое либо условие создать переменные с именами и вывести их на экран. на пхп этот кусок выглядит у меня так foreach($api->data->vehicles as $element) { if ($element->class == 'heavyTank') { $localized_name = $element->localized_name ; $level = $element->level ; $damageDealt = $element->damageDealt ; $battle_count = $element->battle_count ; $nation = $element->nation ; $image_url = $element->image_url ; $frags = $element->frags ; $win_count = $element->win_count; $survivedBattles = $element->survivedBattles; $spotted = $element->spotted; echo ('<tr> <td><img src="' . $wot_url . $image_url . '"></td>'); echo ( "<td>" . $nation."</td>". "<td>" . $localized_name ."</td>". "<td>" . $level."</td>". "<td>" . $damageDealt."</td>". "<td>" .$battle_count."</td>". "<td>" .round($win_count/$battle_count * 100 , 2)." %</td>". "<td>" .round($survivedBattles/$battle_count * 100 , 2)." %</td>". "<td>" .$frags."</td>". "<td>" .$spotted."</td> </tr>" ) ; } } В данному случае мы заносим полученные данные в таблицу. пытался работать с for но так ничего и не получилось. Приплываю к undefinded при попытке создать и вывести переменную. |
Вот собственно получаю данные таким образом. Все приходит в формате JSON
function file_get_contents(url) { var req = null; try { req = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { req = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { try { req = new XMLHttpRequest(); } catch (e) { } } } if (req == null) throw new Error('XMLHttpRequest not supported'); req.open("GET", url, false); req.send(null); return req.responseText; } var profile = file_get_contents('http://worldoftanks.ru/community/accounts/2515952/api/1.9/?source_token=WG-WoT_Assistant-test'); var api = JSON.parse(profile); |
Потому что вы делаете запрос на другой сервер, а xmlrequest работает только для текущего домена. Обращайтесь к php скрипту, который уже будет делать запрос на другой сайт.
|
с json все работает. я то могу обратится и вывести любую из строк масива. проблема именно с циклом.
|
function file_get_contents(url) { var req = null; try { req = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { req = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { try { req = new XMLHttpRequest(); } catch (e) { } } } if (req == null) throw new Error('XMLHttpRequest not supported'); req.open("GET", url, false); req.send(null); console.log(req); return req.responseText; } var profile = file_get_contents('http://worldoftanks.ru/community/accounts/2515952/api/1.9/?source_token=WG-WoT_Assistant-test'); var api = JSON.parse(profile); Где работает? |
Данный код выполнятся будет не в браузере а в приложение где он работает великолепно.
К примеру результатом работы такого куска <body> <p>какие то данные</p> <script> function file_get_contents(url) { var req = null; try { req = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { req = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { try { req = new XMLHttpRequest(); } catch (e) { } } } if (req == null) throw new Error('XMLHttpRequest not supported'); req.open("GET", url, false); req.send(null); return req.responseText; } var profile = file_get_contents('http://worldoftanks.ru/community/accounts/2515952/api/1.9/?source_token=WG-WoT_Assistant-test'); var api = JSON.parse(profile); var medalCarius = ("Медаль Кариуса - " + api.data.achievements.medalCarius + '.<br>'); //Медаль Кариуса document.write(medalCarius); </script> </body> получаем в таком виде. все отлично пашет Цитата:
var api = { "data": { "achievements": { "medalCarius": 1, "medalHalonen": 0, "medalPascucci": 9, "invader": 36, "medalFadin": 0, "armorPiercer": 1, "medalEkins": 1, "mousebane": 1, "mechanicEngineer": false, "medalBrunoPietro": 0, "heroesOfRassenay": 0, "medalKay": 2, "evileye": 15, "tankExperts": { "usa": true, "france": false, "ussr": true, "china": false, "uk": true, "germany": true }, "defender": 24, "medalLeClerc": 2, "supporter": 80, "medalTamadaYoshio": 0, "steelwall": 161, "bombardier": 1, "medalAbrams": 2, "medalBrothersInArms": 21, "maxDiehardSeries": 12, "medalPoppel": 2, "medalOrlik": 0, "maxKillingSeries": 6, "handOfDeath": 1, "medalTarczay": 0, "sinai": 14, "sniper": 350, "warrior": 61, "titleSniper": 1, "maxInvincibleSeries": 4, "medalCrucialContribution": 0, "medalDeLanglade": 0, "medalWittmann": 4, "medalBurda": 0, "maxPiercingSeries": 22, "scout": 53, "beasthunter": 10, "kamikaze": 25, "medalRadleyWalters": 2, "raider": 0, "medalNikolas": 0, "medalOskin": 0, "medalBillotte": 3, "medalLavrinenko": 2, "medalKolobanov": 0, "invincible": 0, "lumberjack": 0, "medalBoelter": 4, "tankExpert": 0, "diehard": 0, "medalLafayettePool": 0, "mechanicEngineers": { "usa": false, "france": false, "ussr": false, "china": false, "uk": false, "germany": false }, "medalLehvaslaiho": 1, "medalDumitru": 1, "maxSniperSeries": 60, "medalKnispel": 1 }, "vehicles": [ { "spotted": 1617, "localized_name": "ИС-6", "name": "Object252", "level": 8, "damageDealt": 2029299, "survivedBattles": 468, "battle_count": 1333, "nation": "ussr", "image_url": "/static/2.3.0/encyclopedia/tankopedia/vehicle/small/ussr-object252.png", "frags": 1611, "win_count": 759, "class": "heavyTank" }, { "spotted": 825, "localized_name": "ИС-3", "name": "IS-3", "level": 8, "damageDealt": 994947, "survivedBattles": 254, "battle_count": 810, "nation": "ussr", "image_url": "/static/2.3.0/encyclopedia/tankopedia/vehicle/small/ussr-is-3.png", "frags": 730, "win_count": 388, "class": "heavyTank" } ], } }; document.write(JSON.stringify( api )); тут все понятно. проверили, вывели полученные данные. и вот надо вывести все данные из vehicles в цикле и создать переменные с именами значений как это сделано в пхп. Ну или хотя бы пример как просто пройтись циклом по массиву и вывести все ключи и значения. С остальным думаю я разберусь. вот тут то и загвоздка. for (var a in api.data.vehicles) |
var el; for (var key in api.data.vehicles) { el = api.data.vehicles[key]; } |
Часовой пояс GMT +3, время: 23:23. |