Не отправляются данные через 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');
}
Ну никак не хочет отрабатывать. Форумчане, есть идеи? :) |
<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);
}
})
});
|
Цитата:
А по теме, ну ни как не хочет работать представленный вами вариант, делает редирект на страницу функции. К слову все работает в таком варианте:
<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 функцию для каждой формы :) |
Цитата:
e.preventDefault() |
Цитата:
Цитата:
А вот так - $('#form_act'), это обработчик для одной формы с уникальным идентификатором! Не используйте id как селектор, используйте классы как было показано и все будет работать. |
Цитата:
|
Цитата:
success: function(data) {}. |
Делаю так:
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'] не была инициализирована. Где накасячил, не пойму.:blink: |
type: $(this).method,
url: $(this).action, *** удалено модератором *** сколько раз можно объяснять, что this в обработчике, это DOM объект, форма текущая, а method и action ее свойства, которые получить вот так: type: this.method, url: this.action, зачем для этого напрягать JQ чтобы получить объект, который и так доступен? Цитата:
$fladmin -> File_great('index1s.php', 'текст для вставки в файл', 'w'); - заменить на exit("Yes");, а в success:
function(data) {
alert(data);
}
тогда точно можно удостовериться, что сервер получил и ответил. И если ответил, то проблемы в $fladmin -> File_great('index1s.php'.... Вот только писать в РНР файл, который есть исполняемый на сервере, данные от клиента, это даже не дыра, это дырища с большие ворота. |
Цитата:
|
| Часовой пояс GMT +3, время: 08:53. |