Javascript.RU

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

Создать Json объект на основе разметки
Здравствуйте. Задача такова: парсить страницу и на ее основе сформировать массив объектов. Сам объект представляет собой 2 поля: 1)имя 2)массив объектов.
На скрине я цветами выделил все:
красный - это массив объектов
оранжевый - это сам объект в массиве
бардовый - поле "Имя"
желтый - поле массив
342432.jpg
я пробую делать это как-то так:
<script>
        function PostData() {
            var questionsObj = [];
            var Polls_Possible_Answers = [];
            var c = [];
            var count_questions = $('.questionBlock>div').length;
            for (var j = 0; j < count_questions; j++)
            {
                var count_answers = $('.answer>div').length;
                for (var p = 0; p < count_answers; p++)
                {
                    if ($('#pos_ans[' + p + ']').val() != "") {
                        Polls_Possible_Answers.push($(this).val());
                    };
                    questionsObj[j] = {
                        que_name: $('#que_name['+j+']').val(),
                        posAns_value: Polls_Possible_Answers
                    }
                    
                }
            }
            var json = $.toJSON(questionsObj);
        }
    </script>

Может есть другие идеи как реализовать такую форму? мне надо передать этот набор объектов в контроллер, где я с его буду брать значения и записывать в бд
Ответить с цитированием
  #2 (permalink)  
Старый 11.12.2016, 18:26
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Зачем парсить, если можно получить коллекцию input? Еще проще использовать форму и ее сериализацию.
Ответить с цитированием
  #3 (permalink)  
Старый 11.12.2016, 18:42
Аспирант
Отправить личное сообщение для Scantraxx Посмотреть профиль Найти все сообщения от Scantraxx
 
Регистрация: 11.12.2016
Сообщений: 47

Спасибо за совет. Я впервые пробую js и мне тут все в новизну. Можно вас попросить пример, как это будет к моей разметке применяться?
Ответить с цитированием
  #4 (permalink)  
Старый 11.12.2016, 18:50
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

А что именно надо? Ведь самое простое, это обрамить все эти элементы формой:

<form>
<div>....<input>...</div>
....
<div>....<input>...</div>
</form>


и получить ее поля как

var fields = $('form').serialise();


Что ну совсем просто. Вот только если с каждым из полей не связаны другие элементы формы, то указывать явно ключ в имени поля - [0], [1], ... нет необходимости, можно просто [].
Ответить с цитированием
  #5 (permalink)  
Старый 11.12.2016, 19:07
Аспирант
Отправить личное сообщение для Scantraxx Посмотреть профиль Найти все сообщения от Scantraxx
 
Регистрация: 11.12.2016
Сообщений: 47

Если я вас правильно понял, то применяя к такому примеру:
<form>
<div class="questionValue">
            <h4> Вопрос #1</h4>
                    <input type="text" name="que_name[0]" />
                    <div class="answer">
                        <div class="possibleAnswer">
                            <input <input type='text' name='pos_ans[0]' />
                        </div>
                    </div>
                    <div><p><a class="plus">Добавить ответ</a></p>
                </div>
        </div>
</form>

<form>
<div class="questionValue">
            <h4> Вопрос #2</h4>
                    <input type="text" name="que_name[0]" />
                    <div class="answer">
                        <div class="possibleAnswer">
                            <input <input type='text' name='pos_ans' />
                            <input <input type='text' name='pos_ans' />
                        </div>
                    </div>
                    <div><p><a class="plus">Добавить ответ</a></p>
                </div>
        </div>
</form>


и потом выполнить ваш пример
var fields = $('form').serialise();


то у меня в контроллер передастся json объект такой структуры, как я обозначил а своем скриншоте в первом посте?
Ответить с цитированием
  #6 (permalink)  
Старый 11.12.2016, 19:12
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Какой язык используется сервером и обязательно ли передача ему JSON? Хотя и это не проблема:

JSON.stringify($('form').serialiseArray()) - все поля формы в json-формате.

PS. Так

<input <input type='text' name='pos_ans' />
<input <input type='text' name='pos_ans' />

нельзя - сервер получит значение последнего поля с именем pos_an, которое "затрет" значение первого с таким же именем.

Последний раз редактировалось laimas, 11.12.2016 в 19:16.
Ответить с цитированием
  #7 (permalink)  
Старый 11.12.2016, 19:17
Аспирант
Отправить личное сообщение для Scantraxx Посмотреть профиль Найти все сообщения от Scantraxx
 
Регистрация: 11.12.2016
Сообщений: 47

Серверная часть на c#. Передавать jSON не обязательно, мне подходит любой способ, чтобы отправить в котроллер данные с формы так, чтобы "ответы" соответствовали "вопросам". То есть хочу передать массив, в котором будут объекты с такими данными: имя вопроса, массив[список вопросов]
Ответить с цитированием
  #8 (permalink)  
Старый 11.12.2016, 19:30
Аспирант
Отправить личное сообщение для Scantraxx Посмотреть профиль Найти все сообщения от Scantraxx
 
Регистрация: 11.12.2016
Сообщений: 47

тогда я буду делать как и раньше, при добавлении на форму элемента input ему будет даваться имя новое, типа:
<input <input type='text' name='pos_ans[0]' />

<input <input type='text' name='pos_ans[1]' />

но, на сколько я понял мне надо сделать, чтобы при динамическом добавлении элемента на форму, получалось следующее:
<form>
<input <input type='text' name='pos_ans[0]' />
</form>

<form>
<input <input type='text' name='pos_ans[0]' />
<input <input type='text' name='pos_ans[1]' />
</form>

верно?
Ответить с цитированием
  #9 (permalink)  
Старый 11.12.2016, 19:33
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Ну тогда либо JSON, либо разбирать строку GET запроса.
Если имя вопроса (в базе вообще-то под уникальным id такое хранят, а не под именем), тогда достаточно список ответов передавать под ключами имен вопросов (по уму так это будут уникальные id), то есть:

<input type="radio" name="answer[id_вопроса]">
<input type="radio" name="answer[id_вопроса]">
....
<input type="radio" name="answer[id_вопроса]">

следующая группа ответов

<input type="radio" name="answer[id_вопроса]">
<input type="radio" name="answer[id_вопроса]">
....
<input type="radio" name="answer[id_вопроса]">

и так далее. И сервер получит массив ключами которого будут идентификаторы вопросов, а их значениями ответы на них.
Ответить с цитированием
  #10 (permalink)  
Старый 11.12.2016, 19:36
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Scantraxx
верно?
Зачем куча форм? Все нужно размещать в одной форме, и потом, если вопрос, а на него варианты ответа, из которых нужно выбрать правильный, то это все таки не type='text', а type="radio". Или ответ на вопрос предполагает ввод произвольного текста?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как создать объект со своими условиями if jtag Общие вопросы Javascript 4 21.02.2016 13:12
ProtoBuf Js Создать объект из proto файла Suharik Prototype & script.aculo.us 2 15.08.2014 13:20
Объект на основе функции Sergey_New Общие вопросы Javascript 22 28.05.2014 09:24
Создать объект в объекте Bryant-24 Общие вопросы Javascript 3 10.07.2013 16:06
Создать объект из строчек Hagrael Events/DOM/Window 16 09.07.2010 10:25