Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 19.09.2018, 10:14
Профессор
Отправить личное сообщение для giwuf Посмотреть профиль Найти все сообщения от giwuf
 
Регистрация: 16.05.2017
Сообщений: 165

Сообщение от рони
giwuf,
получили json, вывели все блоки на страницу, показали только блок с индексом 0.
по клику на btn скрыли блок с текущим индексом, увеличили индекс, открыли следующий блок
Спасибо, рони. Вот по такому принципу?
$(function(){

var vote = {};
var index = 0;
var item;
$('#ok').click(function(){

$.get(pathToPolls, function(data) {

item = JSON.parse(data);
answers(); //выводим блоки с вопросами

});

if(index) {
          vote['id']= item[index]['id'];
  vote['question']=item[index]['question'];
  vote['answers']=item[index]['answers'];
show_answers(); //показываем блок с вопросами
}
else {
          vote['id']= item[index]['id'];
  vote['question']=item[index]['question'];
  vote['answers']=item[index]['answers'];
show_answers();
index++;
}

});
});
Ответить с цитированием
  #12 (permalink)  
Старый 19.09.2018, 10:34
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

giwuf,
зачем вам vote ?
Ответить с цитированием
  #13 (permalink)  
Старый 19.09.2018, 10:38
Профессор
Отправить личное сообщение для giwuf Посмотреть профиль Найти все сообщения от giwuf
 
Регистрация: 16.05.2017
Сообщений: 165

рони и Nexus, спасибо большое за помощь - изучу и постараюсь внедрить!
Ответить с цитированием
  #14 (permalink)  
Старый 19.09.2018, 11:21
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

giwuf,
item = JSON.parse(data); ???
это jquery, data уже обьект , а не строка.
item = data;
Ответить с цитированием
  #15 (permalink)  
Старый 19.09.2018, 12:36
Профессор
Отправить личное сообщение для giwuf Посмотреть профиль Найти все сообщения от giwuf
 
Регистрация: 16.05.2017
Сообщений: 165

Сообщение от рони Посмотреть сообщение
giwuf,
item = JSON.parse(data); ???
это jquery, data уже обьект , а не строка.
item = data;
рони, понял, спасибо
А в случае с примером от Nexus
Сообщение от Nexus
https://jsfiddle.net/vLtrgok1/
идет работа с константой
const data = [{
    "id": "1",
    "question": "Какую марку предпочитаете?",
    "answers": ["honda", "bmw", "volvo"]
}, {
    "id": "2",
    "question": "Цвет авто?",
    "answers": ["black", "red", "blue"]
}];


И теперь вытащить данные с настоящего файла json, как было раньше не удается.
Так:
$.get(data.json, function(data) { });

Или так
$.getJSON(data.json, function( data ) {
  var items = [];
  $.each( data, function( key, val ) {
    items.push( "<li id='" + key + "'>" + val + "</li>" );
  });
});

Показывает ошибку и данные не подтягиваются. Снова что-то недопонимаю?

Иои нужно константу сохранять как файл json и подключать так и потом парсить?
<script type="text/javascript" src="file.json"></script>

Последний раз редактировалось giwuf, 19.09.2018 в 12:40.
Ответить с цитированием
  #16 (permalink)  
Старый 19.09.2018, 12:42
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Сообщение от giwuf
data.json
Сообщение от giwuf
file.json
Ответить с цитированием
  #17 (permalink)  
Старый 19.09.2018, 12:55
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,733

giwuf,
<form id="vote" action="#" method="POST">
    <div id="content">
        <div class="pattern">
            <h4 class="question">{% question %}</h4>
            <div class="answers">
                <div class="radio"><label><input type="radio" name="poll[{% id %}]" value="{% answer.value %}">{% answer.title %}</label></div>
            </div>
        </div>
    </div>
    <div><button type="submit" class="btn btn-default">Ответить</button></div>
</form>
<script>
	$.getJSON('/path/to/you-json',function(data){
		data=(typeof data==='string')?JSON.parse(data):data;
		
		const content = document.getElementById('content');
		const patternNode = content.querySelector('.pattern');

		patternNode.classList.remove('pattern');
		const pattern = patternNode.outerHTML;
		patternNode.parentNode.removeChild(patternNode);

		data.forEach(function(question, index) {
			content.insertAdjacentHTML('beforeEnd', pattern.replace(/{%\s?question\s?%}/gim, question.question));
			const questionNode = content.lastChild;
			questionNode.dataset.index = index;
			questionNode.style.display = 'none';
			const answers = questionNode.querySelector('.answers');
			const answer = answers.querySelector('.radio').outerHTML;
			answers.innerHTML = question.answers.map(function(title, value) {
				return answer
					.replace(/{%\s?id\s?%}/gim, question.id)
					.replace(/{%\s?answer.title\s?%}/gim, title)
					.replace(/{%\s?answer.value\s?%}/gim, value);
			}).join("\n");
		});

		let currentQuestionIndex = 0;
		const questions = [].slice.call(content.querySelectorAll('[data-index]'));
		questions[0].style.display = 'block';

		document.querySelector('#vote [type="submit"]').addEventListener('click', function(e) {
			questions[currentQuestionIndex].style.display = 'none';
			if (++currentQuestionIndex >= questions.length)
				return;

			e.preventDefault();
			questions[currentQuestionIndex].style.display = 'block';
		});
	});
</script>

Последний раз редактировалось Nexus, 19.09.2018 в 13:27.
Ответить с цитированием
  #18 (permalink)  
Старый 19.09.2018, 13:14
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

одно name на все блоки?
Ответить с цитированием
  #19 (permalink)  
Старый 19.09.2018, 13:21
Профессор
Отправить личное сообщение для giwuf Посмотреть профиль Найти все сообщения от giwuf
 
Регистрация: 16.05.2017
Сообщений: 165

О, Nexus и рони, спасибо большое! Готов расцеловать!
Расставлю плюсы как только откроется у меня такая возможность.
2 последних мини-вопроса:
1 - выбранные ответы на вопросы на каждой итерации передается в файл, который укажу в форме в поле action="" или как-то по другому
2 - чтобы добавить нумерацию вопросов по id из файла - мне нужно
data.forEach(function(question, index) {
//приплюсовать к заголовку вопроса параметр index - так?
});
Ответить с цитированием
  #20 (permalink)  
Старый 19.09.2018, 13:22
Профессор
Отправить личное сообщение для giwuf Посмотреть профиль Найти все сообщения от giwuf
 
Регистрация: 16.05.2017
Сообщений: 165

Сообщение от рони
одно name на все блоки?
А это чревато?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить полученные json данные из вне функции dztop Общие вопросы Javascript 9 15.11.2016 16:00
Как передать данные из одинаковых форм php скрипту через AJAX? griga999 AJAX и COMET 28 10.10.2016 06:09
Как вставить данные в highcharts? user71 Общие вопросы Javascript 40 08.08.2016 03:31
Как передать данные в другую панель из выбранной строки таблицы. layout: 'card'. Пролетарий ExtJS 5 03.06.2015 22:53
Запомнить данные вводимые в форму, а затем заполнить ими форму на другой странице. Sigizmund2012 Элементы интерфейса 7 09.12.2014 15:35