Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.09.2017, 16:24
Интересующийся
Отправить личное сообщение для aston Посмотреть профиль Найти все сообщения от aston
 
Регистрация: 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');
	}


Ну никак не хочет отрабатывать. Форумчане, есть идеи?
Ответить с цитированием
  #2 (permalink)  
Старый 03.09.2017, 17:19
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 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);
                        }
                })
    });
Ответить с цитированием
  #3 (permalink)  
Старый 03.09.2017, 19:09
Интересующийся
Отправить личное сообщение для aston Посмотреть профиль Найти все сообщения от aston
 
Регистрация: 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 функцию для каждой формы
Ответить с цитированием
  #4 (permalink)  
Старый 03.09.2017, 19:11
Интересующийся
Отправить личное сообщение для aston Посмотреть профиль Найти все сообщения от aston
 
Регистрация: 03.09.2017
Сообщений: 12

Сообщение от aston
e.prevetDefault()
Забыл сообщить!) У вас отпечатка
e.preventDefault()
Ответить с цитированием
  #5 (permalink)  
Старый 03.09.2017, 19:19
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от aston
У вас отпечатка
Это не опечатка, а сели батарейки на клаве, может либо не допечатать, либо лишнего.

Сообщение от aston
Но мне крайне не хочется копипастить AJAX функцию для каждой формы
А подумать? $('form.id') - это означает один обработчик для всех форм с именем класса id (более презентабельного нельзя придумать?), который в вашей форме и упоминается. Что еще нужно?

А вот так - $('#form_act'), это обработчик для одной формы с уникальным идентификатором! Не используйте id как селектор, используйте классы как было показано и все будет работать.
Ответить с цитированием
  #6 (permalink)  
Старый 03.09.2017, 19:25
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от aston
url: $('#form_act').action,
data: $('#form_act').serialize()
Это полнейшая глупость, так как в обработчике форма доступна как this, стучаться до нее посредством jq это слишком, да еще по много раз, ибо стандартные ее атрибуты и так доступны, как было показано выше.
Ответить с цитированием
  #7 (permalink)  
Старый 04.09.2017, 02:21
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от laimas
dataFilter: function(){
location.reload(true);
}
Функция dataFilter, это для обработки возвращенных сервером данных, location.reload(true) в ней, это моветон.

success: function(data) {}.
Ответить с цитированием
  #8 (permalink)  
Старый 04.09.2017, 11:14
Интересующийся
Отправить личное сообщение для aston Посмотреть профиль Найти все сообщения от aston
 
Регистрация: 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. Причина: (красотульку навел)
Ответить с цитированием
  #9 (permalink)  
Старый 04.09.2017, 11:36
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 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. Причина: Удалены ругательства
Ответить с цитированием
  #10 (permalink)  
Старый 04.09.2017, 15:29
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от laimas
*** удалено модератором ***
За грубость 20 ударов плетью.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как отправляются данные djonA Общие вопросы Javascript 2 05.06.2015 11:16
Значение переменной через запятую DDSSDD Серверные языки и технологии 41 16.10.2014 15:01
не отправляются данные XMLHttpRequest() sinefighter AJAX и COMET 1 07.07.2014 08:30
не отправляются данные XMLHttpRequest() sinefighter Events/DOM/Window 2 05.07.2014 18:05
Книги по Ajax BaVa Учебные материалы 18 18.08.2013 14:05