Совет по циклам в массиве 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, время: 09:07. |