
16.01.2015, 09:36
|
Интересующийся
|
|
Регистрация: 20.12.2014
Сообщений: 24
|
|
ajax передача отдельной переменной и формы
Есть несколько форм, которые нужно отправить ajax-ом php-скрипту для добавления в БД. Не хотелось бы для каждой формы писать отдельный обработчик, поэтому вместе с данными самой формы, думаю, нужно отправлять ее идентификатор, чтобы в php через swith определять, какую форму обрабатывать. Но проблема в том, что не знаю, как потом обращаться к переданным ajax-ом элементам формы.
Думаю, все это должно выглядеть вот так:
var data_form = $(id формы).serialize();
$.ajax({
type: "POST",//тип запроса
url: "обработчик.php",//путь к обработчику
data: {action: 'идентификатор формы', data_form: data_form},//передаваемые данные
...
});
switch ($_POST['action'])
{
case "идентификатор формы":
$элемент формы = $_POST[?];//Что здесь принимать?
break;
}
action - это как раз тот идентификатор формы.
Я пробовал обращаться к элементам формы просто по их названию, как если бы передавал только форму без переменной "action". Может быть можно это как-то по-другому передать или еще что? Прошу помочь.
|
|

16.01.2015, 10:35
|
 |
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Метод serialize() возвращает строку вида param1=val1¶m2=val2.
Это называется url-кодирование (query-строка, url-encoded и т.п.)
Параметр data может быть либо такой вот строкой, либо объектом (пары ключ-значение). Если объект - то происходит его сериализация в строку. Причем значения экранируются, чтобы они передались именно как значения. Так что на серваке у тебя всего два ключа:
POST[action] и POST[data_form], в которой уже сырая строка сериализованной формы. Почему ты ждешь там еще какие-то ключи - загадка. Видимо от безысходности?
Самый простой (и логичный) вариант - добавь скрытый инпут в форму с ее ID. И отсылай как data: data_form. (только логичней не data_form, а form_data).
__________________
В личку только с интересными предложениями
|
|

16.01.2015, 10:54
|
Интересующийся
|
|
Регистрация: 20.12.2014
Сообщений: 24
|
|
Если бы я чего-то ждал, то написал бы, что это ошибка. Это был просто вариант, почему бы и не попробовать. Поэтому и написал сюда. Вариант простой, но не очень красивый. Я думал сделать так: из формы собрать объект и передать его json-строкой. Или json-ом его передавать необязательно, просто объектом, а php примет его как массив?
|
|

16.01.2015, 11:58
|
Интересующийся
|
|
Регистрация: 20.12.2014
Сообщений: 24
|
|
Что ж вы все такие язвительные? Неужели обязательно показывать свое превосходство? Форум для этого сделан? Спасибо за ответы (хоть они мне и не помогли), задачу я решил.
|
|

16.01.2015, 12:47
|
Интересующийся
|
|
Регистрация: 20.12.2014
Сообщений: 24
|
|
Через serializeArray, она возвращает данные в виде объекта. То, что мне и нужно - ключ: значение
|
|

16.01.2015, 13:42
|
 |
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
dmitriy94, чем не устроил вариант со скрытым инпутом? Где же тогда ты хранишь id формы? Не удобней ли хранить в таком вот инпуте?
Можешь использовать и serialize(), а для разбора строки в php использовать parse_str:
parse_str($_POST['form_data'], $formData);
var_dump($formData);
В принципе, особой разницы нет. Но в этом случае на выходе - ассоциативный массив, что очень удобно.
__________________
В личку только с интересными предложениями
|
|

16.01.2015, 14:19
|
Интересующийся
|
|
Регистрация: 20.12.2014
Сообщений: 24
|
|
Сообщение от Rise
|
dmitriy94, а как ты его передашь в php?
|
Post-ом. По сути, тот же json получается
|
|

16.01.2015, 14:24
|
Интересующийся
|
|
Регистрация: 20.12.2014
Сообщений: 24
|
|
Сообщение от danik.js
|
dmitriy94, чем не устроил вариант со скрытым инпутом? Где же тогда ты хранишь id формы? Не удобней ли хранить в таком вот инпуте?
Можешь использовать и serialize(), а для разбора строки в php использовать parse_str:
parse_str($_POST['form_data'], $formData);
var_dump($formData);
В принципе, особой разницы нет. Но в этом случае на выходе - ассоциативный массив, что очень удобно.
|
Зачем мне его где-то хранить? Просто при обработке нужной формы в переменную вставляю ее идентификатор константой, зачем мне для этого какое-то хранилище? Вопрос изначально состоял в том, как одновременно передать переменную-идентификатор и данные формы, а потом обратиться к ним. С этим я разобрался, как раз с помощью функции serializeArray, которая удобно упаковывает данные формы.
|
|

16.01.2015, 15:11
|
 |
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от dmitriy94
|
в переменную вставляю ее идентификатор константой
|
Т.е. у тебя всего одна форма на странице, и ее id вписан прям в js коде, который производит отправку? Тогда понятно. Не хочешь скрытый инпут, тогда можно добавить параметр при сериализации:
var data = $(form).serializeArray();
data.push({name: 'action', value: 'константа'});
...
data: $.param(data)
Все поля будут в POST. Главное не давать полям имя "action".
Сообщение от dmitriy94
|
удобно упаковывает данные формы
|
То есть для тебя удобней формат [{name:'p1', value:'v1'}, {name:'p2', value:'v2'}] , чем {p1: 'v1', p2: 'v2'} , правильно я понимаю?
__________________
В личку только с интересными предложениями
|
|

16.01.2015, 20:57
|
Интересующийся
|
|
Регистрация: 20.12.2014
Сообщений: 24
|
|
Сообщение от Rise
|
"[object Object],[object Object],..." действительно как json) А как в php ты этот json разбираешь?
|
json_decode и получаю обычный ассоциативный массив ([ключ]=>значение), так как, по сути, я json-строку и отправляю.
|
|
|
|