Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вывод cодержимого одного json файла на две html страницы? (https://javascript.ru/forum/misc/78276-vyvod-coderzhimogo-odnogo-json-fajjla-na-dve-html-stranicy.html)

nathan111777 19.08.2019 12:18

Вывод cодержимого одного json файла на две html страницы?
 
Как вывести из одного json файла cодержимое одного обьекта на одну html cтраницу а содержимое другого обьекта на другую html страницу?

Есть один мужской товар (рубашка) и один женский товар (платье) в файле goods.json.
Нужно чтобы при открытии страницы man.html отобразилась мужская рубашка а при открытии страницы woman.html отобразилось платье. Как реализовать это? (без использования jquery) Что добавить в мой код?


eshop.js:
document.addEventListener('DOMContentLoaded', function (e) {               
  loadGoods();  
});
function loadGoods() {
    
    $.getJSON('goods.json', function (data) {
        
        var out = '';
        for (var key in data){
            out+='<div class="single-goods">';
            out+='<h3>'+data[key]['name']+'</h3>';
            out+='<img src="'+data[key].image+'">';
            out+='<p>Цена: '+data[key]['cost']+'</p>';
            out+='<button class="add-to-cart" data-art="'+key+'">Купить</button>';
            out+='</div>';
        }
         document.getElementById('goods').innerHTML = out; 
         document.querySelectorAll('button.add-to-cart').forEach(function(but) {
           but.addEventListener("click",addToCart);
})
    });
}



goods.json:
{
  "Рубашка №1" : {
    "name" : "Рубашка №1",
    "cost" : 1000,
    "country" : "argentina",
    "image" : "images/1.jpg",
    "brand": "M"
  },
 "Платье №1" : {
    "name" : "Платье №1",
    "cost" : 1000,
    "country" : "brazil",
    "image" : "images/a.jpg",
     "brand": "L"
  }
}



man.html:

<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
</head>
<body>
        <a href="index.html">на главную cтраницу</a>
         <div id="mini-cart"></div>
         <div id="goods"></div>
<script src="js/jquery-3.1.1.min.js"></script>
<script src="js/eshop.js"></script>
</body>
</html>


woman.html:

//такой же код как и в man.html

ksa 19.08.2019 12:29

nathan111777, ситуация конечно бестолковая... Такого быть не должно.

Но если как упражнение какое-то... Тогда, как вариант, можно прочитать название страницы и послать в функцию аргумент равный одному из
- Рубашка №1
- Платье №1
Далее, без всякого цикла, просто использовать указанный ключ...

nathan111777 19.08.2019 12:42

Как реализовать это кодом? Я просто только начинаю изучать JS...Приведите пожалуйста хоть маленький пример кода как это реализовать...
А про ситуацию, просто мне нужно чтобы все товары хранились в одном json файле а не в разных json файлах...

ksa 19.08.2019 12:44

Цитата:

Сообщение от nathan111777
мне нужно чтобы все товары хранились в одном json файле

Тогда как ты будешь понимать какую информацию тебе извлекать?
Зачем грузить всю информацию, когда нужна только часть?

ksa 19.08.2019 12:54

Цитата:

Сообщение от nathan111777
Как реализовать это кодом?

Я вот про такое писал выше...
document.addEventListener('DOMContentLoaded', function (e) {               
	var o={
		'man.html': 'Рубашка №1',
		'woman.html': 'Платье №1'
	};
	var key=top.location.href;
	key=key.match(/[^\/]+$/);
	key=o[key];
	loadGoods(key);  
});
function loadGoods(Key) {
	$.getJSON('goods.json', function (data) {
		var out = '';
		out+='<div class="single-goods">';
		out+='<h3>'+data[Key]['name']+'</h3>';
		out+='<img src="'+data[Key].image+'">';
		out+='<p>Цена: '+data[Key]['cost']+'</p>';
		out+='<button class="add-to-cart" data-art="'+Key+'">Купить</button>';
		out+='</div>';
		document.getElementById('goods').innerHTML = out; 
		document.querySelectorAll('button.add-to-cart').forEach(function(but) {
			but.addEventListener("click",addToCart);
		})
	});
}

Но если данных будет много - это не выход из ситуации... :no:

nathan111777 19.08.2019 13:13

ну пока делаю сайт для портфолио, то думаю закинуть 8 мужских рубашек и 8 женских платьев.
Просто на моем сайте есть корзина товаров cart.html в которую добавляюю товары, пробовал создать отдельный файл json для женских товарова и копию eshop.js то начались проблемы с localstorage...когда-то давно посоветовали взять и все обьекты поместить в один json файл что б не было ошибок с localstorage

ksa 19.08.2019 13:27

nathan111777, желательно получать только нужные на странице данные...
А ты собираешься грузить как женское, так и мужское. У тебя серверной "части" нет совсем?

nathan111777 19.08.2019 14:18

я учусь на front-end developer, а потому серверной части нет, знаю что это делается на серверной части но все равно хочу доделать это потому что сайт уже на 90% готов, а это мини интернет магазин.
а что делает эта строка?
key=key.match(/[^\/]+$/);

почему так много символов в круглых скобках? для чего они?

ksa 19.08.2019 14:38

Цитата:

Сообщение от nathan111777
а что делает эта строка?
key=key.match(/[^\/]+$/);

Возвращает имя страницы из УРЛа...
https://javascript.ru/string/match

Цитата:

Сообщение от nathan111777
почему так много символов в круглых скобках?

Ты можешь написать другой паттерн.

nathan111777 19.08.2019 14:50

я вот подумал а если например добавлю в json 8 мужских товаров и 8 женских,а что если
1) пронумеровать объекты(назвать их числом) в файле json мужские от 1 до 8 а женские от 8 до 16.
2) в обьекте "o" свойству man.html присвоить значение от 1 до 8.
а свойству woman.html присвоить значение от 8 до 16.
Так можно или свойство может принимать только одно значение?
Если можно то как это сделать?


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