Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.01.2015, 09:36
Интересующийся
Отправить личное сообщение для dmitriy94 Посмотреть профиль Найти все сообщения от dmitriy94
 
Регистрация: 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". Может быть можно это как-то по-другому передать или еще что? Прошу помочь.
Ответить с цитированием
  #2 (permalink)  
Старый 16.01.2015, 10:35
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Метод serialize() возвращает строку вида param1=val1&param2=val2.
Это называется url-кодирование (query-строка, url-encoded и т.п.)
Параметр data может быть либо такой вот строкой, либо объектом (пары ключ-значение). Если объект - то происходит его сериализация в строку. Причем значения экранируются, чтобы они передались именно как значения. Так что на серваке у тебя всего два ключа:
POST[action] и POST[data_form], в которой уже сырая строка сериализованной формы. Почему ты ждешь там еще какие-то ключи - загадка. Видимо от безысходности?

Самый простой (и логичный) вариант - добавь скрытый инпут в форму с ее ID. И отсылай как data: data_form. (только логичней не data_form, а form_data).
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 16.01.2015, 10:54
Интересующийся
Отправить личное сообщение для dmitriy94 Посмотреть профиль Найти все сообщения от dmitriy94
 
Регистрация: 20.12.2014
Сообщений: 24

Если бы я чего-то ждал, то написал бы, что это ошибка. Это был просто вариант, почему бы и не попробовать. Поэтому и написал сюда. Вариант простой, но не очень красивый. Я думал сделать так: из формы собрать объект и передать его json-строкой. Или json-ом его передавать необязательно, просто объектом, а php примет его как массив?
Ответить с цитированием
  #4 (permalink)  
Старый 16.01.2015, 11:58
Интересующийся
Отправить личное сообщение для dmitriy94 Посмотреть профиль Найти все сообщения от dmitriy94
 
Регистрация: 20.12.2014
Сообщений: 24

Что ж вы все такие язвительные? Неужели обязательно показывать свое превосходство? Форум для этого сделан? Спасибо за ответы (хоть они мне и не помогли), задачу я решил.
Ответить с цитированием
  #5 (permalink)  
Старый 16.01.2015, 12:47
Интересующийся
Отправить личное сообщение для dmitriy94 Посмотреть профиль Найти все сообщения от dmitriy94
 
Регистрация: 20.12.2014
Сообщений: 24

Через serializeArray, она возвращает данные в виде объекта. То, что мне и нужно - ключ: значение
Ответить с цитированием
  #6 (permalink)  
Старый 16.01.2015, 13:42
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

dmitriy94, чем не устроил вариант со скрытым инпутом? Где же тогда ты хранишь id формы? Не удобней ли хранить в таком вот инпуте?

Можешь использовать и serialize(), а для разбора строки в php использовать parse_str:

parse_str($_POST['form_data'], $formData);
var_dump($formData);


В принципе, особой разницы нет. Но в этом случае на выходе - ассоциативный массив, что очень удобно.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #7 (permalink)  
Старый 16.01.2015, 14:19
Интересующийся
Отправить личное сообщение для dmitriy94 Посмотреть профиль Найти все сообщения от dmitriy94
 
Регистрация: 20.12.2014
Сообщений: 24

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

Сообщение от danik.js Посмотреть сообщение
dmitriy94, чем не устроил вариант со скрытым инпутом? Где же тогда ты хранишь id формы? Не удобней ли хранить в таком вот инпуте?

Можешь использовать и serialize(), а для разбора строки в php использовать parse_str:

parse_str($_POST['form_data'], $formData);
var_dump($formData);


В принципе, особой разницы нет. Но в этом случае на выходе - ассоциативный массив, что очень удобно.
Зачем мне его где-то хранить? Просто при обработке нужной формы в переменную вставляю ее идентификатор константой, зачем мне для этого какое-то хранилище? Вопрос изначально состоял в том, как одновременно передать переменную-идентификатор и данные формы, а потом обратиться к ним. С этим я разобрался, как раз с помощью функции serializeArray, которая удобно упаковывает данные формы.
Ответить с цитированием
  #9 (permalink)  
Старый 16.01.2015, 15:11
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 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'} , правильно я понимаю?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #10 (permalink)  
Старый 16.01.2015, 20:57
Интересующийся
Отправить личное сообщение для dmitriy94 Посмотреть профиль Найти все сообщения от dmitriy94
 
Регистрация: 20.12.2014
Сообщений: 24

Сообщение от Rise Посмотреть сообщение
"[object Object],[object Object],..." действительно как json) А как в php ты этот json разбираешь?
json_decode и получаю обычный ассоциативный массив ([ключ]=>значение), так как, по сути, я json-строку и отправляю.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ajax передача переменной imediasun1 Элементы интерфейса 2 23.10.2013 18:06
Js класс, передача переменной из ajax access defender057 AJAX и COMET 4 26.06.2013 00:14
Передача переменной из js в php, посредством ajax 9xakep Серверные языки и технологии 32 05.05.2012 13:02
построение Графика (передача переменной ajax json) Sadist_dead AJAX и COMET 10 13.08.2011 13:27
Передача переменной из JS в PHP методом ajax skalka jQuery 7 28.08.2010 12:05