Javascript.RU

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

Как последовательно считывать данные json файла и отдавать в форму?
Есть интерфес опросника, который работает без перезагрузки страницы и данные которые берутся из json файла.
Вариант с одним вопросом реализован, сложности начинаются, когда вопросов много в цепочке один за другим.
Как сделать так, чтобы считывать данные из json файла в массив и последовательно отдавать после нажатия на кнопку ответить очередного вопроса?

Собираю массив через
Код:
data.forEach(function(item) {});
, но если внутрь поместить функцию answers, то абсолютно все ответы ждя разных вопросов просто отобразятся на одной страницы.
Как можно реализовать задуманное?

Фидл здесь - http://jsfiddle.net/qxrognd6/

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

    $.get(poll.json, function(data) {

      // фактически данные poll.json хранятся в таком виде
      //data = [{"id":"1", "question":"Какую марку предпочитаете?", "answers":["honda", "bmw", "volvo"]}, {"id":"2", "question":"Цвет авто?", "answers":["black", "red", "blue"]}

      data.forEach(function(item) {

        vote.id = item.id;
        vote.question = item.question;
        vote.answers = item.answers;

      });

      answers();
    });

    appearance('#start', '#content');
    return false;

  });

  var appearance = function(slide, content) {
    $(slide).hide('fast', showNewContent);
    $('#load').remove();
    $('#wrapper').append('<span id="load">LOADING...</span>');
    $('#load').fadeIn('normal');

    function showNewContent() {
      $(content).show('normal', hideLoader());
    }

    function hideLoader() {
      $('#load').fadeOut('normal');
    }
  };
  var answers = function() {
    for (var i = 0; i <= vote['answers'].length - 1; i++) {
    var form = $('#vote');
    var answers = form.find('.answers');
    form.parent().find('.question').text(vote['question']);
      answers.append('<div class="radio">' +
        '<label>' +
        '<input type="radio" name="poll" value="' + (i + 1) + '">' +
        vote['answers'][i] +
        '</label>' +
        '</div>');
    }
  };
});

<div id="start">
<a id='ok' href=''>Поехали</a>
</div>
<div id="content">
<h4 class="question">Вопрос</h4>
<form id="vote" action="vote.php" method="POST">
   <div class="answers"></div>
   <button type="submit" class="btn btn-default">ответить</button>
</form>
</div>

Код:
#content {
	display: none;
}
#load {
 display: none;
 position: absolute;
 right: 10px;
 top: 10px;
 width: 43px;
 height: 11px;
 text-indent: -9999em;
}

Последний раз редактировалось giwuf, 18.09.2018 в 22:05.
Ответить с цитированием
  #2 (permalink)  
Старый 18.09.2018, 20:33
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

А вывести все вопросы на страницу в одной форме и последовательно их показывать - не вариант?
Ответить с цитированием
  #3 (permalink)  
Старый 18.09.2018, 21:52
Профессор
Отправить личное сообщение для giwuf Посмотреть профиль Найти все сообщения от giwuf
 
Регистрация: 16.05.2017
Сообщений: 167

Сообщение от Nexus Посмотреть сообщение
А вывести все вопросы на страницу в одной форме и последовательно их показывать - не вариант?
Nexus,
вариант. А как это сделать? в смысле последовательно показывая и скрывая предыдущий вопрос? Прошу прощения, не дописал 3 строчки кода в функцию answers. Исправился.

Я правильно вас понял, что вы предлагаете каким-то образом выводить и последовательно скрывать вот этот перечень вопросов?

<form id="vote" action="#" method="POST">
<div id="content">
<h4 class="question">Какую марку предпочитаете?</h4>
             <div class="answers">
               <div class="radio"><label><input type="radio" name="poll" value="1">honda</label></div>
               <div class="radio"><label><input type="radio" name="poll" value="2">bmw</label></div> 
               <div class="radio"><label><input type="radio" name="poll" value="3">volvo</label></div>
                <button type="submit" class="btn btn-default">Ответить</button>
</div>
<h4 class="question">Цвет авто?</h4>
             <div class="answers">
               <div class="radio"><label><input type="radio" name="poll" value="1">black</label></div>
               <div class="radio"><label><input type="radio" name="poll" value="2">red</label></div> 
               <div class="radio"><label><input type="radio" name="poll" value="3">blue</label></div>
                <button type="submit" class="btn btn-default">Ответить</button>
</div>
</div>
</form>

Последний раз редактировалось giwuf, 18.09.2018 в 22:28.
Ответить с цитированием
  #4 (permalink)  
Старый 18.09.2018, 22:26
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

giwuf,
в строке 2 добавить индекс = 0, по клику увеличивать и показывать вопрос согласно индексу
Ответить с цитированием
  #5 (permalink)  
Старый 19.09.2018, 05:59
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

giwuf, если данные в json и их количество в наборе равно (по три кнопки), то нужно не строить постоянно html код, а заполнять значениями данных одних и тех же кнопок, двигаясь по массиву json.
Ответить с цитированием
  #6 (permalink)  
Старый 19.09.2018, 09:27
Профессор
Отправить личное сообщение для giwuf Посмотреть профиль Найти все сообщения от giwuf
 
Регистрация: 16.05.2017
Сообщений: 167

Сообщение от рони
giwuf,
в строке 2 добавить индекс = 0, по клику увеличивать и показывать вопрос согласно индексу
Спасибо рони, вроде бы и улавливаю смысл сказанного, но не до конца понимаю, как в зависимости от индекса показывать вопрос и что делать в этом случае с foreach ?
$(function() {
  var index = 0;
  var vote = {};
  $('#ok').click(function() {
     index++;

    $.get(poll.json, function(data) {

      data.forEach(function(item) {

        vote.id = item.id;
        vote.question = item.question;
        vote.answers = item.answers;

      });

      answers();
    });

    appearance('#start', '#content');
    return false;

  });
});


Сообщение от laimas
giwuf, если данные в json и их количество в наборе равно (по три кнопки), то нужно не строить постоянно html код, а заполнять значениями данных одних и тех же кнопок, двигаясь по массиву json.
laimas, да согласен с вами, можно отформатировать и внедрить html вначале, у меня основной затык в том как заполнять значениями данных одних и тех же кнопок, двигаясь по массиву json, которые будут переключаться по кнопке ответить
Ответить с цитированием
  #7 (permalink)  
Старый 19.09.2018, 09:41
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Сообщение от giwuf
что делать в этом случае с foreach
выкинуть, зачем он нужен?
Ответить с цитированием
  #8 (permalink)  
Старый 19.09.2018, 09:50
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

giwuf,
получили json, вывели все блоки на страницу, показали только блок с индексом 0.
по клику на btn скрыли блок с текущим индексом, увеличили индекс, открыли следующий блок
Ответить с цитированием
  #9 (permalink)  
Старый 19.09.2018, 09:55
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

giwuf,
медитировать после создания всех полей тут
форма пошаговая обязательные поля
Ответить с цитированием
  #10 (permalink)  
Старый 19.09.2018, 09:59
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

https://jsfiddle.net/vLtrgok1/
Ответить с цитированием
Ответ



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

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


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