Создать Json объект на основе разметки
Вложений: 1
Здравствуйте. Задача такова: парсить страницу и на ее основе сформировать массив объектов. Сам объект представляет собой 2 поля: 1)имя 2)массив объектов.
На скрине я цветами выделил все: красный - это массив объектов оранжевый - это сам объект в массиве бардовый - поле "Имя" желтый - поле массив Вложение 3376 я пробую делать это как-то так: <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> Может есть другие идеи как реализовать такую форму? мне надо передать этот набор объектов в контроллер, где я с его буду брать значения и записывать в бд |
Зачем парсить, если можно получить коллекцию input? Еще проще использовать форму и ее сериализацию.
|
Спасибо за совет. Я впервые пробую js и мне тут все в новизну. Можно вас попросить пример, как это будет к моей разметке применяться?
|
А что именно надо? Ведь самое простое, это обрамить все эти элементы формой:
<form> <div>....<input>...</div> .... <div>....<input>...</div> </form> и получить ее поля как var fields = $('form').serialise(); Что ну совсем просто. Вот только если с каждым из полей не связаны другие элементы формы, то указывать явно ключ в имени поля - [0], [1], ... нет необходимости, можно просто []. |
Если я вас правильно понял, то применяя к такому примеру:
<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 объект такой структуры, как я обозначил а своем скриншоте в первом посте? |
Какой язык используется сервером и обязательно ли передача ему JSON? Хотя и это не проблема:
JSON.stringify($('form').serialiseArray()) - все поля формы в json-формате. PS. Так <input <input type='text' name='pos_ans' /> <input <input type='text' name='pos_ans' /> нельзя - сервер получит значение последнего поля с именем pos_an, которое "затрет" значение первого с таким же именем. |
Серверная часть на c#. Передавать jSON не обязательно, мне подходит любой способ, чтобы отправить в котроллер данные с формы так, чтобы "ответы" соответствовали "вопросам". То есть хочу передать массив, в котором будут объекты с такими данными: имя вопроса, массив[список вопросов]
|
тогда я буду делать как и раньше, при добавлении на форму элемента 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> верно? |
Ну тогда либо 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_вопроса]"> и так далее. И сервер получит массив ключами которого будут идентификаторы вопросов, а их значениями ответы на них. |
Цитата:
|
Часовой пояс GMT +3, время: 10:30. |