Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.04.2013, 10:17
Новичок на форуме
Отправить личное сообщение для barstyle Посмотреть профиль Найти все сообщения от barstyle
 
Регистрация: 30.04.2013
Сообщений: 5

Совет по циклам в массиве 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 при попытке создать и вывести переменную.
Ответить с цитированием
  #2 (permalink)  
Старый 30.04.2013, 10:23
Новичок на форуме
Отправить личное сообщение для barstyle Посмотреть профиль Найти все сообщения от barstyle
 
Регистрация: 30.04.2013
Сообщений: 5

Вот собственно получаю данные таким образом. Все приходит в формате 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);

Последний раз редактировалось barstyle, 30.04.2013 в 10:30.
Ответить с цитированием
  #3 (permalink)  
Старый 30.04.2013, 11:41
Профессор
Отправить личное сообщение для zebra Посмотреть профиль Найти все сообщения от zebra
 
Регистрация: 14.09.2011
Сообщений: 523

Потому что вы делаете запрос на другой сервер, а xmlrequest работает только для текущего домена. Обращайтесь к php скрипту, который уже будет делать запрос на другой сайт.
Ответить с цитированием
  #4 (permalink)  
Старый 30.04.2013, 12:02
Новичок на форуме
Отправить личное сообщение для barstyle Посмотреть профиль Найти все сообщения от barstyle
 
Регистрация: 30.04.2013
Сообщений: 5

с json все работает. я то могу обратится и вывести любую из строк масива. проблема именно с циклом.
Ответить с цитированием
  #5 (permalink)  
Старый 30.04.2013, 12:08
Профессор
Отправить личное сообщение для zebra Посмотреть профиль Найти все сообщения от zebra
 
Регистрация: 14.09.2011
Сообщений: 523

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);

Где работает?
Ответить с цитированием
  #6 (permalink)  
Старый 01.05.2013, 01:49
Новичок на форуме
Отправить личное сообщение для barstyle Посмотреть профиль Найти все сообщения от barstyle
 
Регистрация: 30.04.2013
Сообщений: 5

Данный код выполнятся будет не в браузере а в приложение где он работает великолепно.

К примеру результатом работы такого куска

<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>

получаем в таком виде. все отлично пашет

Цитата:
какие то данные

Медаль Кариуса - 1
ну давайте зайдем тогда с этой стороны. создадим массив ручками.

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)
Ответить с цитированием
  #7 (permalink)  
Старый 01.05.2013, 14:26
Профессор
Отправить личное сообщение для zebra Посмотреть профиль Найти все сообщения от zebra
 
Регистрация: 14.09.2011
Сообщений: 523

var el;
for (var key in api.data.vehicles) {
     el = api.data.vehicles[key];
}
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как достать данные из JSON массива? Dimaz jQuery 15 27.11.2012 21:58
Проблемы с jqGrid и JSON massacra_panda Библиотеки/Тулкиты/Фреймворки 1 08.10.2012 16:44
Ajax и Json callback функция borabora Prototype & script.aculo.us 0 30.01.2012 15:01
JSON или JSONP для запросов на другой сервер? Метод GET, для длинных сообщений? Kotakota jQuery 5 23.08.2011 23:12
jQuery. Обработка ошибок и JSON. mma_mma jQuery 3 19.07.2010 12:10