Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Передача данных формы (https://javascript.ru/forum/misc/65436-peredacha-dannykh-formy.html)

prog_f130 19.10.2016 09:52

Передача данных формы
 
Здравствуйте. Есть ли способ преобразовать данные формы и передать серверу объект? Скажем если у меня есть несколько чекбоксов и поле ввода
<input type="checkbox" name="1" >
<input type="checkbox" name="2" >
<input type="checkbox" name="3" >
<input type="text" name="count" value = "10">


И я хочу передать серверу объект
{
    on: [1,2,3],
    count: 10
}


в то время как стандартная форма на сервере парсится
{
    1: "on",
    2: "on",
    3: "on",
    count: "10",
}

Dilettante_Pro 19.10.2016 10:25

prog_f130,
Читайте про onsubmit, preventDefault и ajax

prog_f130 19.10.2016 10:31

Ajax же предполагает асинхронный обмен с сервером без обновления страницы? а мне нужен полноценный переход на другую страницу с передачей данных обработчику на сервере. Или я что то не понимаю?

ksa 19.10.2016 11:45

Цитата:

Сообщение от prog_f130
И я хочу передать серверу объект

Серверу можно передать только строку...

ksa 19.10.2016 11:49

Цитата:

Сообщение от prog_f130 (Сообщение 432214)
И я хочу передать серверу объект
{
    on: [1,2,3],
    count: 10
}


в то время как стандартная форма на сервере парсится
{
    1: "on",
    2: "on",
    3: "on",
    count: "10",
}

Х/з чего у тебя там за серверный язык... Но для CSP подойдет такой вариант УРЛа

var url='<url_странички>?on=1&on=2&on=3&count=10';

Rise 19.10.2016 12:15

prog_f130, элементарно
<input type="checkbox" name="on[]" value="1">
<input type="checkbox" name="on[]" value="2">
<input type="checkbox" name="on[]" value="3">
<input type="text" name="count" value="10">

warren buffet 19.10.2016 12:45

С чекбоксами есть затык. Не зачеканный - не придет.

https://www.w3.org/TR/html401/intera...html#h-17.13.2

Поэтому как хочет ТС не получится, или придется синхронизировать, то есть иметь на сервере модель формы.

ksa 19.10.2016 13:43

Цитата:

Сообщение от Rise
элементарно

Скорее всего это для какого-то определенного серверного языка... :D
Мне, например, для CSP или ZEN это вообще тарабарщина никому не нужная.

ksa 19.10.2016 14:17

Цитата:

Сообщение от Rise
а ты проверь

Мне проверять не нужно - я это точно знаю. :D

prog_f130 19.10.2016 14:24

ksa, я понимаю, что передается серверу строка. Вопрос в том, как сериализуются данные форм перед отправкой и как десериализуются на сервере. Мне показалось проще при сериализации загнать все чекбоксы в массив, чем потом серверу копаться во всех пришедших с клиента переменных форм и выцеплять оттуда чекбоксы.
Rise, Спасибо, это решение подошло.
warren buffet, В рамках задачи незачеканые значения и не нужны.

ksa 20.10.2016 08:51

Цитата:

Сообщение от prog_f130
Мне показалось проще при сериализации загнать все чекбоксы в массив, чем потом серверу копаться во всех пришедших с клиента переменных форм и выцеплять оттуда чекбоксы.

"Сервер" это не абстрактное слово... Это целая совокупность ПО и железа которое (больше конечно относится к ПО) работает по-разному и по-разному обрабатывает/интерпретирует пришедшие УРЛы.
Мой вариант удачно интерпретируется "моим" серверным языком (как раз в "массив"), а вариант понравившийся тебе подходит для того же ПХП... Мне он и нафик не нужен. :)

laimas 20.10.2016 13:39

Цитата:

Сообщение от ksa
Мой вариант удачно интерпретируется "моим" серверным языком (как раз в "массив"), а вариант понравившийся тебе подходит для того же ПХП

А РНР что в нечто невообразимое пакует данные? name[]=val&name[]=val и в Африке будут означать передачу двух элементов массива name и РНР возвращает их как суперглобалные массивы $_GET/$_POST. И данную запись кроме как array name[val, val] трактовать нельзя.

laimas 20.10.2016 13:42

Цитата:

Сообщение от prog_f130
Мне показалось проще при сериализации загнать все чекбоксы в массив, чем потом серверу копаться во всех пришедших с клиента переменных форм и выцеплять оттуда чекбоксы.

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

ksa 20.10.2016 14:22

Цитата:

Сообщение от laimas
А РНР что в нечто невообразимое пакует данные?

Я понятия про это не имею, т.к. с ПХП не работаю...

ksa 20.10.2016 14:23

Цитата:

Сообщение от laimas
name[]=val&name[]=val и в Африке будут означать передачу двух элементов массива name и РНР возвращает их как суперглобалные массивы $_GET/$_POST.

Еще раз повторюсь... Может для ПХП это и массив name, но в "моем случае" получится полная фигня.

warren buffet 20.10.2016 20:51

Цитата:

Сообщение от prog_f130
Вопрос в том, как сериализуются данные форм перед отправкой и как десериализуются на сервере.

Зачем тебе это знать? Передал из браузера форму - получил на сервере массив. Упомянутый PHP изначально и создавался под это дело - формы. Если у тебя пехепе - думать не о чем.

warren buffet 20.10.2016 20:52

Посмотреть как сериализуется и что передается запросто можно в заголовках.

prog_f130 21.10.2016 10:01

Пардон, очевидно я просто неправильно сформировал свой вопрос. Нужно было написать "как мне оформить форму так, что бы обработчик на сервере получил массив значений", что вобщем то сразу уловил Rice. Спасибо за ответы.
ksa, Очень много сказано, очень мало по делу. Все уже поняли, что ты работаешь с CSP или ZEN и тебе пофиг на php и прочие серверные языки, не нужно в каждом посте лить воду.


Часовой пояс GMT +3, время: 08:10.