25.10.2018, 01:35
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Chmil
|
ето не формирование JSON ответа?
|
JSON, но
Сообщение от Chmil
|
зачем exit?
для чего? я ж не использую GET запросы
|
если перед выводом в браузер json строки до этого вывода или после него будет также вывод в браузер, то клиент получит невалидный json. Как при этом поступит JQ написано выше.
Ваша страница ведь формируется не этим куском кода, а как мне не ведомо. Но по коду я могу только предполагать, что запрос (action формы) как-то связан с выводом в браузер (тут код формы и т.п.). Если это так, то обработчик запроса клиента должен быть первым в коде и завершается выходом, чтобы код следуемый далее и связанный с выводом не исполнялся.
Если запрос не связан с другими выводами и единственный вывод в нем, это вывод json, то все нормально.
Это вы должны знать и иметь ввиду, ибо кроме вас полностью серверного кода никто не видит.
|
|
25.10.2018, 01:38
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
На клиенте есть установленный обработчик, но нет запроса. Это могут быть конфликты или что-то мешает и т.п. Для начала заремируйте подключение сторонних скриптов - метрику яшки и прочую лабуду, она пока не нужна, иначе в отладчике ... Проверить сам обработчик можно добавлением в его код вывод чего угодно в консоль, если он будет, то проблемы с самим методом $.ajax.
|
|
25.10.2018, 21:02
|
Аспирант
|
|
Регистрация: 07.07.2017
Сообщений: 41
|
|
Цитата:
|
заремируйте подключение сторонних скриптов
|
на локалхосте нет ничего стороннего, там просто установлен вордпрес с дефолтной темой, там должно работать, но не работает
Цитата:
|
Проверить сам обработчик можно добавлением в его код вывод чего угодно в консоль
|
ето можно сделать в браузере в инспекторе (F12)?
Цитата:
|
проблемы с самим методом $.ajax
|
скорее всего так и есть, даже не с методом а с спецификой взаимодействия с вордпрес
|
|
26.10.2018, 03:30
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Мне же недоступен ваш локальный сервер, если речь о нем, а в сети по ссылке просмотреть обработчики, а там все яшкой и прочими забито.
Просто в обработчик отправления формы добавить строку: console.log(1) (до $.ajax), если в консоли отладчика будет вывод 1, значит нет иных кто бы мешал отправлению формы и проблема с $.ajax. В WP нет специфики взаимодействия, есть правила подключения плагинов и своих скриптов, что описано в документации WP. Их немного меняют от версии к версии, но все это отражается в доках. Собственно такой порядок не только в WP, но и в других CMS.
Интересно, а зачем на сервер отправлять запрос для перересчета каких-то килограммов, очень мощная математика? )
Последний раз редактировалось laimas, 26.10.2018 в 03:38.
|
|
26.10.2018, 10:44
|
Аспирант
|
|
Регистрация: 07.07.2017
Сообщений: 41
|
|
Цитата:
|
в обработчик отправления формы добавить строку: console.log(1) (до $.ajax)
|
с етим понял, вечером попробую
Цитата:
|
зачем на сервер отправлять запрос для перересчета каких-то килограммов, очень мощная математика?
|
не мощная, просто в JS я очень слабо разбираюсь, по этому делаю как я занаю, и как мне проще, по сути мне нужен простой конвертер, он может быть на чем угодно, главное чтобы работал, большое спасибо Вам за помощь
|
|
26.10.2018, 11:57
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от Chmil
|
по сути мне нужен простой конвертер, он может быть на чем угодно
|
Ну так сама математика конвертирования не меняется от языка к языку, и не так сложно ее описать и на JS.
Если бы сервер по цвету глаз вычислял, что нужно самую малость и будет счастье, тогда бы был смысл прятать этот чудодейственный расчет на сервере. А простой конвертор, тут не выгодно обслуживать запросы и соединения, это должно быть сервисом на клиенте. С этого вопроса и нужно было начинать.
|
|
26.10.2018, 12:26
|
|
Профессор
|
|
Регистрация: 08.11.2017
Сообщений: 641
|
|
jQuery(document).ready(function($){
$('#btn_submit').click(function(){
Есть варик, что вызывается до того, как загружена форма, и поэтому слушатель не устанавливается и поэтому не срабатывает клик.
Я уже намекал, что надо открыть консоль разработчика, и там смотреть результаты "клика", надо в саму ф-цию клика поставить что-нибудь типа console.log('clicked'), что бы убедиться что слушатель установлен и отрабатывает.
После этого, если слушатель работает, нужно убедиться, что нет ошибок при выполнении ajax, посмотреть в разделе "сеть", на предмет, был ли вообще ajax запрос, после клика...
|
|
27.10.2018, 23:03
|
Аспирант
|
|
Регистрация: 07.07.2017
Сообщений: 41
|
|
Цитата:
|
в обработчик отправления формы добавить строку: 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, как говорится гугл мне в помощь, но все-же мне бы хотелось решить вопрос отправки данных из полей формы аяксом, так сказать на будущее...
|
|
28.10.2018, 03:11
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
У полей формы нет типов kg и lb, это удалить как мусор. А вот имена этим полям нужно определить - name="kg", name="lb", иначе на сервер такие поля не передаются по умолчанию. Кнопка отправления формы должна быть либо type="submit", либо <button>Посчитать</button>, и все будет работать.
|
|
28.10.2018, 12:28
|
Аспирант
|
|
Регистрация: 07.07.2017
Сообщений: 41
|
|
сделал как Вы описали, теперь по нажатию на кнопку "Посчитать" информация в консоль выводится, но на сервер по прежнему данные не передаются, теперь получается проблема с самим методом 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>';
}
?>
|
|
|
|