Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вывод курса валют (https://javascript.ru/forum/misc/72548-vyvod-kursa-valyut.html)

spinastr 22.02.2018 19:32

Manyasha,

вот и что это значит?

https://pp.userapi.com/c840336/v8403...9wLhL-PmFs.jpg

laimas 22.02.2018 19:40

spinastr,
куда поместить курсы и дату из полученного ответа определяется ключами самого объекта. А для этого имена ключей дают элементам на странице как имена классов.

<span class="previous date"></span> - это составное имя класса, и к этому элементу можно обратиться по любому из имени класса (как селектору). Если же обращаться по двум именам, то их пишут через точку - previous.date.

Полученный объект (курсы) обходят двумя циклами, в первом $.each(data, function(k, o) значением аргумента "k" будут первичные ключи объекта, то есть "current" и "previous", а аргумент "о" принимает объекты с датой и курсами валют.

Второй цикл $.each(o, function(a, r) - обходит курсы и его аргументами будут: "a" - ключи "date", "USD", "EUR", а "r" будет иметь значения этих ключей, то есть даты и курсов.

Метод $('.'+k+'.'+a) соединяя первичные ключи объекта со вторичными формирует селектор составного имени класса, и они будут равны:

.current.date
.current.USD
.current.EUR
.previous.date
.previous.USD
.previous.EUR

и jQuery по этим селекторам выбирает элементы на странице. Я и показал в примере и таблицу, и параграфы, а можно было всю страницу заклеить элементами с классами, в которые jQ и поместит данные.

.html() - метод который помещает сами данные плюс стрелки.

.attr('title', function() {
return $(this).hasClass('title') ? data[k].date : ''
}) - этот метод добавит и дату в title значение элемента, если у элемента есть имя класса title. Поэтому у <span class="previous USD title"></span> будет подсказка с датой, а у <span class="previous EUR"></span> нет.

Вот и вся работа на клиенте. Все до безобразия просто.

А ошибки если есть, так с ними надо разбираться, хрен знает что у вас там творится. А гаданием ни кто заниматься не станет.

Manyasha 22.02.2018 19:42

эта ошибка говорит о том, что у вас где-то не закрыты скобки. Проверяйте, для каждой ли открытой скобки есть закрывающая.
Если вы пользуетесь каким-либо редактором (например notepade++), они обычно подсвечивают пары скобок.

laimas 22.02.2018 19:43

Цитата:

Сообщение от spinastr
вот и что это значит?

Это значит, что я для того чтобы пример работал на странице, закомментировал две строки кода - //комментарий.

Вы у этой строки $.getJSON("http://h116641.s08.test-hf.su/", function(data) { его убрали, а из этой //}); нет, и тело функции не закрыто!

Когда же вы изучать матчасть начнете.

Nexus 22.02.2018 19:46

Это нужно поместить перед "</body>":

$(function(){
	$.getJSON('http://h116641.s08.test-hf.su/',function(data){
		$('[data-currency]').each(function(){
			var currency=this.dataset.currency.toUpperCase(),
				type=this.dataset.currencryType.toLowerCase()||'current',
				prefix=this.dataset.currencryPrifex||'';
				
			if(!data[type] || !data[type][currency])
				return;
				
			var item=data[type][currency],
				html=(prefix?prefix.trim()+' ':'')+item.value.toFixed(2)+' '+
					'<b class="'+['down','up'][item.rate-1]+'">'+
						['▼','▲'][item.rate-1]+
					'</b>';
					
			$(this).html(html);
		});
	});
});


Так можно вывести курсы:
<div data-currency="usd" 
	 data-currency-type="current"
	 data-currency-prefix="$">Тут будет курс доллара на сегодня</div>
	 
<div data-currency="usd" 
	 data-currency-type="previous"
	 data-currency-prefix="$">Тут будет курс доллара на вчера</div>
	 
<div data-currency="eur" 
	 data-currency-type="current"
	 data-currency-prefix="€">Тут будет курс евро на сегодня</div>
	 
<div data-currency="eur" 
	 data-currency-type="previous"
	 data-currency-prefix="€">Тут будет курс евро на вчера</div>
	 
Доллар вчера стоил <span data-currency="usd" data-currency-type="previous"></span> рублей, 
а евро <span data-currency="eur" data-currency-type="previous"></span>

Если я нигде не ошибся, то будет работать.

laimas 22.02.2018 19:52

Nexus,
зачем? Ему код простого автомата дали, а вы наворотили еще кучу, чтобы он вообще запутался?

И зачем такие сложности городить?

spinastr 22.02.2018 19:56

Я очень ценю всё что выше написано, это труд что бы мне объяснить.

Спасибо ВАМ, но как вы мне объясняете и я не понимаю!

Так и я объясняю, что не понимаю...

На той неделе сделали курс доллара, я немного что то запомнил, потом подумал про евро, прошло 5 дней и я уже забыл подробности js.

Вы в этой среде обитаете и шарите в этом и вам кажется что и другие с лёгкостью поймут.

У меня нету даже базового знания js

Я методом народного тыка 5 лет учил HTML и CSS- мне ни кто не помогал, а когда говорили я не понимал.

Так и тут я понял 37%

Буду сейчас подставлять снова методом народного тыка и задовать вопросы в форум.

До этого все скрипты были написано, спасибо за это и снова как неделю назад, осталось вывести из json в html и я не понимаю.

Даже если и пойму, забуду через неделю.

Почему нельзя сразу всё подсказать, можно казать 97% сделано, конечно не мной мне помогли, видите как мне тяжело даются оставшиеся 3 %?

Например я разбираюсь в сочетании цветов и легко могу что то подобрать, а другой в этом не понимает. Лучше сразу подсказать чем учить и смотреть как человек мучается.

spinastr 22.02.2018 19:58

Nexus,

поместил на тестовой странице пусто

Nexus 22.02.2018 20:06

Цитата:

Сообщение от spinastr
Nexus,

поместил на тестовой странице пусто

Я привел пример того, как можно вывести информацию на страницу...
JS-код вы вставили, отлично, но что на счет вывода информации?

Читайте то, что ниже этого:
Цитата:

Сообщение от Nexus
Так можно вывести курсы:


Nexus 22.02.2018 20:07

laimas, таки да, тут я затупил, тс не справился со столь "сложным" выводом информации...


Часовой пояс GMT +3, время: 02:48.