Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Не могу передать данные из формы в php (https://javascript.ru/forum/dom-window/75605-ne-mogu-peredat-dannye-iz-formy-v-php.html)

laimas 25.10.2018 01:35

Цитата:

Сообщение от Chmil
ето не формирование JSON ответа?

JSON, но

Цитата:

Сообщение от Chmil
зачем exit?
для чего? я ж не использую GET запросы

если перед выводом в браузер json строки до этого вывода или после него будет также вывод в браузер, то клиент получит невалидный json. Как при этом поступит JQ написано выше.

Ваша страница ведь формируется не этим куском кода, а как мне не ведомо. Но по коду я могу только предполагать, что запрос (action формы) как-то связан с выводом в браузер (тут код формы и т.п.). Если это так, то обработчик запроса клиента должен быть первым в коде и завершается выходом, чтобы код следуемый далее и связанный с выводом не исполнялся.

Если запрос не связан с другими выводами и единственный вывод в нем, это вывод json, то все нормально.

Это вы должны знать и иметь ввиду, ибо кроме вас полностью серверного кода никто не видит.

laimas 25.10.2018 01:38

На клиенте есть установленный обработчик, но нет запроса. Это могут быть конфликты или что-то мешает и т.п. Для начала заремируйте подключение сторонних скриптов - метрику яшки и прочую лабуду, она пока не нужна, иначе в отладчике ... Проверить сам обработчик можно добавлением в его код вывод чего угодно в консоль, если он будет, то проблемы с самим методом $.ajax.

Chmil 25.10.2018 21:02

Цитата:

заремируйте подключение сторонних скриптов
на локалхосте нет ничего стороннего, там просто установлен вордпрес с дефолтной темой, там должно работать, но не работает

Цитата:

Проверить сам обработчик можно добавлением в его код вывод чего угодно в консоль
ето можно сделать в браузере в инспекторе (F12)?

Цитата:

проблемы с самим методом $.ajax
скорее всего так и есть, даже не с методом а с спецификой взаимодействия с вордпрес

laimas 26.10.2018 03:30

Мне же недоступен ваш локальный сервер, если речь о нем, а в сети по ссылке просмотреть обработчики, а там все яшкой и прочими забито.

Просто в обработчик отправления формы добавить строку: console.log(1) (до $.ajax), если в консоли отладчика будет вывод 1, значит нет иных кто бы мешал отправлению формы и проблема с $.ajax. В WP нет специфики взаимодействия, есть правила подключения плагинов и своих скриптов, что описано в документации WP. Их немного меняют от версии к версии, но все это отражается в доках. Собственно такой порядок не только в WP, но и в других CMS.

Интересно, а зачем на сервер отправлять запрос для перересчета каких-то килограммов, очень мощная математика? )

Chmil 26.10.2018 10:44

Цитата:

в обработчик отправления формы добавить строку: console.log(1) (до $.ajax)
с етим понял, вечером попробую

Цитата:

зачем на сервер отправлять запрос для перересчета каких-то килограммов, очень мощная математика?
не мощная, просто в JS я очень слабо разбираюсь, по этому делаю как я занаю, и как мне проще, по сути мне нужен простой конвертер, он может быть на чем угодно, главное чтобы работал, большое спасибо Вам за помощь

laimas 26.10.2018 11:57

Цитата:

Сообщение от Chmil
по сути мне нужен простой конвертер, он может быть на чем угодно

Ну так сама математика конвертирования не меняется от языка к языку, и не так сложно ее описать и на JS.
Если бы сервер по цвету глаз вычислял, что нужно самую малость и будет счастье, тогда бы был смысл прятать этот чудодейственный расчет на сервере. А простой конвертор, тут не выгодно обслуживать запросы и соединения, это должно быть сервисом на клиенте. С этого вопроса и нужно было начинать.

SuperZen 26.10.2018 12:26

jQuery(document).ready(function($){
       $('#btn_submit').click(function(){

Есть варик, что вызывается до того, как загружена форма, и поэтому слушатель не устанавливается и поэтому не срабатывает клик.

Я уже намекал, что надо открыть консоль разработчика, и там смотреть результаты "клика", надо в саму ф-цию клика поставить что-нибудь типа console.log('clicked'), что бы убедиться что слушатель установлен и отрабатывает.

После этого, если слушатель работает, нужно убедиться, что нет ошибок при выполнении ajax, посмотреть в разделе "сеть", на предмет, был ли вообще ajax запрос, после клика...

Chmil 27.10.2018 23:03

Цитата:

в обработчик отправления формы добавить строку: console.log(1) (до $.ajax)
сделал, и вот что получается, следующий код в консоль выводит информацию:
jQuery(document).ready(function($){
	console.log(1);
			$('#lbkg_form').submit(function(e) {				
				e.preventDefault();
				$.ajax({
					type: this.method,
					url: this.action,
					dataType: "json", // тип передачи данных - это тип ожидаемых данных от сервера
					data: $(this).serialize(),
					// после получения ответа сервера
					success: function(data){
						$('.messages').html(data.result); // выводим ответ сервера
					}
				});
			});
		});


а вот если пишу так:
jQuery(document).ready(function($){	
			$('#lbkg_form').submit(function(e) {	
			console.log(1);
				e.preventDefault();
				$.ajax({
					type: this.method,
					url: this.action,
					dataType: "json", // тип передачи данных - это тип ожидаемых данных от сервера
					data: $(this).serialize(),
					// после получения ответа сервера
					success: function(data){
						$('.messages').html(data.result); // выводим ответ сервера
					}
				});
			});
		});

то не работает, вот где запинание:
$('#lbkg_form').submit(function(e) {


возможно действительно
Цитата:

Есть варик, что вызывается до того, как загружена форма, и поэтому слушатель не устанавливается и поэтому не срабатывает клик.
но как с етим бороться?

Цитата:

не так сложно ее описать и на JS
да, попробую сейчас написать калькулятор на js, как говорится гугл мне в помощь, но все-же мне бы хотелось решить вопрос отправки данных из полей формы аяксом, так сказать на будущее...

laimas 28.10.2018 03:11

У полей формы нет типов kg и lb, это удалить как мусор. А вот имена этим полям нужно определить - name="kg", name="lb", иначе на сервер такие поля не передаются по умолчанию. Кнопка отправления формы должна быть либо type="submit", либо <button>Посчитать</button>, и все будет работать.

Chmil 28.10.2018 12:28

сделал как Вы описали, теперь по нажатию на кнопку "Посчитать" информация в консоль выводится, но на сервер по прежнему данные не передаются, теперь получается проблема с самим методом ajax:
jQuery(document).ready(function($){	
			$('#lbkg_form').submit(function(e) {
				console.log(1);				
				e.preventDefault();
				$.ajax({
					type: this.method,
					url: this.action,
					dataType: "json", // тип передачи данных - это тип ожидаемых данных от сервера
					data: $(this).serialize(),
					// после получения ответа сервера
					success: function(data){
						$('.messages').html(data.result); // выводим ответ сервера
					}
				});
			});
		});


<?php
/*
* Plugin Name: Lb & Kg
* Description: Перевод веса фунтов в килограммы и наоборот
* Author: Chmil
* Version: 1.0
*/

if (isset($_POST["kg"])) {
	
	//добавил для проверки
	header('Location: http://www.google.com/');
	
	$arr = array('result' => '123456789');
	
	echo json_encode($arr);
	
}

add_shortcode('lbkggetfishbychmil', 'lb_kg_getfish');

function lb_kg_getfish($atts) {
 wp_enqueue_script('lb-kg-script', plugins_url('lb-kg.js', __FILE__), array('jquery'));
 wp_enqueue_style('lb-kg-styles', plugins_url('style.css', __FILE__));
 echo '<div class="form-lb-kg">';
 echo '<form action="' . plugins_url('lb-kg/lb-kg.php') . '" method="POST" id="lbkg_form">';
 echo '<fieldset>';
 echo '<legend>Онлайн конвертер (фунты & килограммы)</legend>';
 echo '<p><input name="kg" id="kg" placeholder="кг"></p>';
 echo '<p><input name="lb" id="lb" placeholder="lb"></p>';
 echo '<input id="btn_submit" type="submit" value="Посчитать" />';
 echo '</fieldset>';
 echo '</form>';
 echo '<div class="messages"></div>';
 echo '</div>';
}

?>


Часовой пояс GMT +3, время: 01:07.