03.09.2017, 16:24
|
Интересующийся
|
|
Регистрация: 03.09.2017
Сообщений: 12
|
|
Не отправляются данные через AJAX POSTом
Есть несколько форм с уникальными ID. В каждой форме есть скрытый INPUT инициализирующий PHP функцию.
<form class='id' id="form_act" ction="/options/CORE.Executive.file.Admin.php" method="post">
<input type="text" name="name" placeholder="имя" required />
<input type="text" name="phone" placeholder="телефон" required />
<input type="hidden" name="funNAME" value="Act">
<button onclick="act()">Отправить</button>
</form>
Написан AJAX функция отлавливающая событие onclick по button в конкретной форме, и отправляющая запрос на указанную страницу.
$(document).ready(function() {
$(this).submit(function() {
var soc = '#'+($(this).find('form.id').attr('id'));
$.ajax({
type: $(soc).attr('method'),
url: $(soc).attr('action'),
data: $(soc).serialize(),
dataFilter: function(){
location.reload(true);
}
})
return false;
});
});
if ($_POST['funNAME']) {
$fladmin -> File_great('index1s.php', 'текст для вставки в файл', 'w');
}
Ну никак не хочет отрабатывать. Форумчане, есть идеи?
|
|
03.09.2017, 17:19
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
<button onclick="act()">Отправить</button> а это зачем?
$('form.id').submit(function(e) {
e.prevetDefault();
$.ajax({
type: this.method,
url: this.action,
data: $(this).serialize(),
dataFilter: function(){
location.reload(true);
}
})
});
|
|
03.09.2017, 19:09
|
Интересующийся
|
|
Регистрация: 03.09.2017
Сообщений: 12
|
|
Сообщение от laimas
|
<button onclick="act()">Отправить</button> а это зачем?
|
Со старой формы капипастом досталось Забыл удалить.
А по теме, ну ни как не хочет работать представленный вами вариант, делает редирект на страницу функции. К слову все работает в таком варианте:
<form id="form_act" ction="/options/CORE.Executive.file.Admin.php" method="post">
<input type="text" name="name" placeholder="имя" required />
<input type="text" name="phone" placeholder="телефон" required />
<input type="hidden" name="funNAME" value="Act">
<button>Отправить</button>
</form>
$(document).ready(function() {
$('#form_act').submit(function(e) {
e.preventDefault();
$.ajax({
type: 'post',
url: $('#form_act').action,
data: $('#form_act').serialize(),
dataFilter: function(){
location.reload(true);
}
})
});
});
if ($_POST['funNAME']) {
$fladmin -> File_great('index1s.php', 'текст для вставки в файл', 'w');
}
Но мне крайне не хочется копипастить AJAX функцию для каждой формы
|
|
03.09.2017, 19:11
|
Интересующийся
|
|
Регистрация: 03.09.2017
Сообщений: 12
|
|
Сообщение от aston
|
e.prevetDefault()
|
Забыл сообщить!) У вас отпечатка
e.preventDefault()
|
|
03.09.2017, 19:19
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от aston
|
У вас отпечатка
|
Это не опечатка, а сели батарейки на клаве, может либо не допечатать, либо лишнего.
Сообщение от aston
|
Но мне крайне не хочется копипастить AJAX функцию для каждой формы
|
А подумать? $( 'form.id') - это означает один обработчик для всех форм с именем класса id (более презентабельного нельзя придумать?), который в вашей форме и упоминается. Что еще нужно?
А вот так - $( '#form_act'), это обработчик для одной формы с уникальным идентификатором! Не используйте id как селектор, используйте классы как было показано и все будет работать.
|
|
03.09.2017, 19:25
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от aston
|
url: $('#form_act').action,
data: $('#form_act').serialize()
|
Это полнейшая глупость, так как в обработчике форма доступна как this, стучаться до нее посредством jq это слишком, да еще по много раз, ибо стандартные ее атрибуты и так доступны, как было показано выше.
|
|
04.09.2017, 02:21
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от laimas
|
dataFilter: function(){
location.reload(true);
}
|
Функция dataFilter, это для обработки возвращенных сервером данных, location.reload(true) в ней, это моветон.
success: function(data) {}.
|
|
04.09.2017, 11:14
|
Интересующийся
|
|
Регистрация: 03.09.2017
Сообщений: 12
|
|
Делаю так:
HTML KOД
<form class='className' action="/options/file.php" method="POST">
<input type="text" name="name" placeholder="Ваше имя" required />
<input type="text" name="phone" placeholder="Ваш телефон" required />
<input type="hidden" name="funsGet" value="Act">
<button>Отправить</button>
</form>
JS KOД
$(document).ready(function() {
$('form.className').submit(function(event) {
event.preventDefault();
$.ajax({
type: $(this).method,
url: $(this).action,
data: $(this).serialize(),
success: function() {
location.reload(true);
},
dataFilter: function(){
//location.reload(true);
}
})
});
});
PHP KOД
if ($_POST['funsGet']) {
$fladmin -> File_great('index1s.php', 'текст для вставки в файл', 'w');
}
success успешно отрабатывает, намекая что скрипт выполнил отправку, но функция php не создает файл т.к. $_POST['funsGet'] не была инициализирована. Где накасячил, не пойму.
Последний раз редактировалось aston, 04.09.2017 в 11:27.
Причина: (красотульку навел)
|
|
04.09.2017, 11:36
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
type: $(this).method,
url: $(this).action,
*** удалено модератором ***
сколько раз можно объяснять, что this в обработчике, это DOM объект, форма текущая, а method и action ее свойства, которые получить вот так:
type: this.method,
url: this.action,
зачем для этого напрягать JQ чтобы получить объект, который и так доступен?
Сообщение от aston
|
но функция php не создает файл т.к. $_POST['funsGet'] не была инициализирована. Где накасячил, не пойму.
|
Во-первых, это не функция, а сначала условие, по которому уже будет выполняться функция.
$fladmin -> File_great('index1s.php', 'текст для вставки в файл', 'w'); - заменить на exit("Yes");, а в success:
function(data) {
alert(data);
}
тогда точно можно удостовериться, что сервер получил и ответил. И если ответил, то проблемы в $fladmin -> File_great('index1s.php'....
Вот только писать в РНР файл, который есть исполняемый на сервере, данные от клиента, это даже не дыра, это дырища с большие ворота.
Последний раз редактировалось laimas, 04.09.2017 в 15:30.
Причина: Удалены ругательства
|
|
04.09.2017, 15:29
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от laimas
|
*** удалено модератором ***
|
За грубость 20 ударов плетью.
|
|
|
|