Показать сообщение отдельно
  #15 (permalink)  
Старый 12.12.2016, 03:04
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Как на сервере обрабатывается ответ клиента? Ведь можно сделать так:

Опрос 1
<input name="interview[0][question]" value="qst" />
<input name="interview[0][answer][]" value="ans" />
<input name="interview[0][answer][]" value="ans" />
<input name="interview[0][answer][]" value="ans" />
Опрос 2
<input name="interview[1][question]" value="qst" />
<input name="interview[1][answer][]" value="ans" />
<input name="interview[1][answer][]" value="ans" />


и передать хоть POST/GET форму, хоть JSON, и например РНР сам разберет данные и вернет такой массив

[interview] => Array
        (
            [0] => Array
                (
                    [question] => qst
                    [answer] => Array
                        (
                            [0] => ans
                            [1] => ans
                            [2] => ans
                        )

                )

            [1] => Array
                (
                    [question] => qst
                    [answer] => Array
                        (
                            [0] => ans
                            [1] => ans
                        )

                )

        )


Ответы будут восприняты как индексный массив ключа answer, потому как они указаны в имени как элементы массива [answer][]. В противном случае будет принят только последний из всех вариантов ответа, так как у массива все ключи должны быть уникальными, как и имена свойств объекта. Соответственно по индексу ключа interview формируется и массив опросов.

Ничего страшного не произойдет если передать серверу такую форму

<input name="question" value="qst" />
<input name="answer" value="ans" />
<input name="answer" value="ans" />
<input name="answer" value="ans" />

<input name="question" value="qst" />
<input name="answer" value="ans" />
<input name="answer" value="ans" />


если она в строгой последовательности, к примеру ее JSON представление будет таким

[{"name":"question","value":"qst"},{"name":"answer" ,"value":"ans"},{"name":"answer","value":"ans"},{" name":"question","value":"qst"},{"name":"answer"," value":"ans"},{"name":"answer","value":"ans"}]

и север осведомлен, что первый параметр "name", это вопрос (значение question), а за ним следует варианты (значение answer), которые нужно помещать в массив (в случае записи в базу, строку для многострочной вставки в таблицу вариантов, после того как будет записан вопрос и получен его идентификатор), а если параметр "name" опять равен "question", значит далее идут значения нового опроса.

Если пользователь сперва задает количество вопросов и вариантов ответа на них и сервер формирует ему готовую форму, выбирайте любой вариант, при "ручном разборе" хоть так, хоть иначе ориентироваться придется по значениям name.

PS. Если по каким либо причинам на сервере затруднительно сделать такой разбор и ему нужны не сырцы данных, а уже готовый объект, то можно такой разбор сделать и на клиенте.

Последний раз редактировалось laimas, 12.12.2016 в 03:13.
Ответить с цитированием