Вход

Просмотр полной версии : Отправляются данные за вторым разом


Chmil
07.11.2018, 01:44
Здравствуйте уважаемые, простой скрипт отправки полей формы по непонятным причинам отправляет данные обработчику (php-файл) всегда за вторым разом. Данный скрипт удалось написать с Вашей помощью, за что очень Вам благодарен (ссылка на предыдущую тему (https://javascript.ru/forum/dom-window/75605-ne-mogu-peredat-dannye-iz-formy-v-php.html)) и он же на другой странице работает идеально. Итак, вот код скрипта:
jQuery(document).ready(function($){
$('#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); // выводим ответ сервера
}
});
});
});
а вот обработчик (часть php-файла):
/*поле textarea*/
echo '<form action="' . plugins_url('lb-kg/lb-kg.php') . '" method="POST" id="lbkg_form">';
wp_editor($GLOBALS["part"], 'editor_id', array(
'wpautop' => 1,
'media_buttons' => 1,
'textarea_name' => 'part', //нужно указывать!
'textarea_rows' => 20,
'tabindex' => null,
'editor_css' => '',
'editor_class' => '',
'teeny' => 0,
'dfw' => 0,
'tinymce' => 1,
'quicktags' => 1,
'drag_drop_upload' => true
) );
echo '<input type="hidden" name="hlbkgadm" value="1">';
submit_button( 'Сохранить контент' );
echo '</form>';
echo '<div class="messages"></div>';

/*сам обработчик*/
if (($_SERVER['REQUEST_METHOD'] === 'POST') && !empty($_POST["hlbkgadm"])) {
if (!empty($_POST["part"])) {
$f = fopen("part.txt", "w");
fwrite($f, $_POST['part']);
fclose($f);
unset ($_POST["part"]);
$arr = array('result' => '<span style="color: #006400; font-weight: 600;">Изменения успешно сохранены!</span>');
exit(json_encode($arr));
} else {
$f = fopen("part.txt", "w");
fwrite($f, '');
fclose($f);
$arr = array('result' => '<span style="color: #FF0000; font-weight: 600;">Данные отсутствуют!</span>');
exit(json_encode($arr));
}
}

Движок wordpress, использую встроенные функции движка. Смотрел в консоль, при первом нажатии на кнопку "submit_button" данные отправляются, но только те что были до ввода. Объясню на двух примерах:
1. открываю данное текстовое поле для ввода, оно пустое, я ввожу текст, жму отправить, происходит отправка но переменная пустая (так как раньше поле было пустым), в поле введенный текст присутствует, когда жму повторно на кнопку, то отправляется как надо.
2. например ввожу в пустое поле цифру 1, жму кнопку 1 раз, передается пустое значение (до того поле было пустым), дописываю цифру 2 (в поле уже введено 12), жму кнопку еще 1 раз, передается цифра 1, если потом еще раз нажму, то уже передастся 12.
Получается что при первом нажатии текущий текст поля где-то запоминается и за вторым разом нажатия уже отправляется.
Вот еще на тостере нашел подобную проблему https://toster.ru/q/227618
Помогите пожалуйста в решении этой проблемы, спасибо

laimas
08.11.2018, 05:56
Вот еще на тостере нашел подобную проблему

Там причина проблемы в том, что установку обработчика воткнули в функцию.

А что у вас такое $_POST["part"] и где оно в форме?

И уже говорилось - проблемы связанные с серверным кодом размещать в соответствующем разделе.

Chmil
08.11.2018, 09:28
А что у вас такое $_POST["part"] и где оно в форме?
в обработчике 6-я строка:
'textarea_name' => 'part', //нужно указывать!
ето имя поля textarea функции wordpress 'wp_editor', она выводит не просто поле textarea, а полноценный визуальный и HTML редактор WP (TinyMCE)

laimas
08.11.2018, 09:47
ето имя поля textarea функции wordpress

Сейчас и на будущее - здесь форум Javascript, РНР код выполнить нельзя и никто не будет догадываться что выдаст клиенту какая-то функция WP. Открывайте инспектор отладчика, копируйте html код формы и т.п., по которому у вас вопрос и который обрабатывает JS скрипт, и вставляйте его в темах, а не функции WP. Можно и из правого меню браузера "Исходный код страницы" скопировать нужный html фрагмент.

В этом случае вы можете рассчитывать на ответ, иначе никто гадать не станет.