
30.11.2019, 11:15
|
Кандидат Javascript-наук
|
|
Регистрация: 08.11.2019
Сообщений: 113
|
|
получить значения полей отправляемой формы и передать в data на ajax
Приветствую гениев ajax кода. Большая к вам просьба, подскажите решение пожалуйста...
Есть страница на которой множество различных форм с input, textarea, select, checkbox и radio... При чем в одной форме может быть только input, в другой 2 input и select , а в 3 и других все перечисленное вместе взятое.... у этих полей ввода заданы одни атрибуты name , а обработчик находится на другом сервере и жде совершенно другие name с value из отправляемой формы...
Для примера, в обработчик передаю данные введенные вручную в вот так и он принимает...
$.ajax({
url: "http://site.com/blablabla/",
data: {
fullName: "Иванов Иван Васильевич",
eMail: "ivanov@mail.ru",
phone: "+712312312312",
discipline: "Английский",
learningLevel: "Средний",
school: "Главный филиал",
teacher: "Петров Пётр Петрович",
beginDate: "17.03",
weekdays: "ср/чт",
beginTime: "15:30",
endTime: "16:10",
type: "Заявка на обучение",
description: "Примечание к заявке"
},
type: "POST",
success: function(result) {
if (result.Error) alert("Ошибка: " + result.Error);
else alert("Успешно: " + result.Id);
},
error: function(jqXhr) {
alert("Ошибка: " + jqXhr.statusText + " (" + jqXhr.readyState + ", " + jqXhr.status + ", " + jqXhr.responseText + ")");
}
});
т.е. у нас поле name="name" value="Игорь" например, а обработчик ждет
name="fullName" value="Игорь"
Потому хочу сделать как то так, но что то не получается...
var strr = $(this).serialize();
var strresult = JSON.parse(JSON.stringify(strr));
$.ajax({
url: "http://site.com/blablabla/",
data: {
fullName: strresult.name,
eMail: strresult.mail,
phone: strresult.tel,
discipline: "Английский",
learningLevel: "Средний",
school: "Главный филиал",
teacher: "Петров Пётр Петрович",
beginDate: "17.03",
weekdays: "ср/чт",
beginTime: "15:30",
endTime: "16:10",
type: "Заявка на обучение",
description: "Примечание к заявке"
},
type: "POST",
success: function(result) {
if (result.Error) alert("Ошибка: " + result.Error);
else alert("Успешно: " + strresult.tel);
},
error: function(jqXhr) {
alert("Ошибка: " + jqXhr.statusText + " (" + jqXhr.readyState + ", " + jqXhr.status + ", " + jqXhr.responseText + ")");
}
});
|
|

30.11.2019, 12:53
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Триллер какой-то о множестве форм и ручном вводе. А имена полей форм переименовать под нужное?
|
|

30.11.2019, 13:23
|
Кандидат Javascript-наук
|
|
Регистрация: 08.11.2019
Сообщений: 113
|
|
а если конструктор эти формы делает и доступа к именам полей нет?
|
|

30.11.2019, 13:43
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Ну это уже ваши проблемы, но какой бы ни был конструктор, имена не он за вас придумывать будет, это он может сделать только по умолчанию.
А если у вас куча форм, а значит куча разных имен, и вся эта куча обрабатывается одним обработчиком, то опишите соответствия имен текущих именам нужных, по которому делайте замену.
|
|

30.11.2019, 14:29
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Что-то я сходу отмел конструктор сайтов, которые хост предлагает, о нем речь? Кто же вас заставляет такую дурь использовать. )
Если исходить из предположения, что "много форм и один обработчик", то в нем можно так:
//это список имен полей, которые нужно изменять, где
//свойство - это текущее имя поля формы
//значение свойства - это имя на которое нужно заменить
var fields = {
old_name1: 'new_name1',
old_name2: 'new_name2',
}, data = new FormData();
$.each(this.elements, function() {
data.append(fields[this.name] || this.name, this.value)
});
$.ajax({
url: "http://site.com/blablabla/",
type: "POST",
data: data,
success: function(result) {
.....
Последний раз редактировалось laimas, 30.11.2019 в 14:36.
|
|

01.12.2019, 09:44
|
Кандидат Javascript-наук
|
|
Регистрация: 08.11.2019
Сообщений: 113
|
|
так а вручную мне как некоторые параметры передать?
discipline: "Английский",
learningLevel: "Средний",
school: "Главный филиал",
teacher: "Петров Пётр Петрович",
Именно в скрипте хочу их добавить что бы не создавать кучу скрытых полей
|
|

01.12.2019, 10:59
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от firsmember
|
так а вручную мне как некоторые параметры передать?
|
Добавить к полям что есть в форме?
|
|

01.12.2019, 11:02
|
Кандидат Javascript-наук
|
|
Регистрация: 08.11.2019
Сообщений: 113
|
|
да, именно
|
|

01.12.2019, 11:23
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
<form>
<input name="a" value="11" />
<input name="b" value="22" />
<input name="c" value="33" />
<input name="d" value="44" />
</form>
<pre></pre>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
var fields = { //заменяемые поля
a: 'new_a',
c: 'new_c'
}, data = { //добаления
discipline: "Английский",
learningLevel: "Средний",
school: "Главный филиал",
teacher: "Петров Пётр Петрович"
}
$.each(document.querySelector('form').elements, function() { //в реальном document.querySelector('form').elements заменить на this.elements
data[fields[this.name] || this.name] = this.value
});
$('pre').text(JSON.stringify(data, null, 4)); //посмотреть результат
</script>
|
|

01.12.2019, 11:41
|
Кандидат Javascript-наук
|
|
Регистрация: 08.11.2019
Сообщений: 113
|
|
Отлично, спасибо, только один момент
сейчас в data
данные получатся в вот такой форме
"discipline": "Английский",
"learningLevel": "Средний",
"school": "Главный филиал",
"teacher": "Петров Пётр Петрович",
"new_a": "11",
"b": "22",
"new_c": "33",
"d": "44"
А ужно
school: "Главный филиал",
teacher: "Петров Пётр Петрович",
beginDate: "17.03",
weekdays: "ср/чт",
beginTime: "15:30",
endTime: "16:10",
type: "Заявка с лендинга Долгопрудный",
description: "Примечание к заявке"
Т.е. только значение должно оборачиваться в двойные кавычки
Последний раз редактировалось firsmember, 01.12.2019 в 11:44.
|
|
|
|