На моем сайте, через form
я отправляю / регистрирую ту же информацию в базе данных, делаю запрос SELECT
/ query и возвращаю его! Верните последнюю таблицу, сохраненную в базе данных, только этот пользователь просто ввел в форму (вместе с дополнительной информацией, поступающей из базы данных).
Как я хочу отображать эти значения, поступающие из базы данных в modal bootstrap
, необходимо, чтобы страница не давала обновления. Для этого я вставил AJAX
следующим образом:
$(document).ready(function(){ $('#enviar').click(function(){ $.ajax({ //CALL AJAX IN WORDPRESS url: 'wp-admin/admin-ajax.php', type: 'POST', //INSERT, QUERY AND DISPLAYS TO USER data: 'action=prancha', error: function(){ alert('ERRO!!!'); }, //IF OK, DISPLAYS TO USER IN DIV "RESULT" success: function(data){ $('#result').html(data); } }); }); });
В моем файле functions.php:
function prancha(){ header('Content-Type: text/html; charset=utf-8'); include "../../../wp-config.php"; /* DECLARING THE VARIABLES */ $nome = ""; $email = ""; $estilo = ""; $experiencia = ""; $altura = ""; $peso = ""; // VALIDATION if(!empty($_POST)){ $nome = $_POST['nome']; $email = $_POST['email']; $estilo = $_POST['estilo']; $experiencia = $_POST['experiencia']; $altura = $_POST['altura']; $peso = $_POST['peso']; cadastra_user($nome, $email, $estilo, $experiencia, $altura, $peso); } //INSERT IN DATABASE NAME, EMAIL, ESTILE, EXPERIENCE, HEIGHT AND WEIGHT function cadastra_user($nome, $email, $estilo, $experiencia, $altura, $peso){ global $wpdb; $table = 'user'; $data = array( 'nome' => $nome, 'email' => $email, 'estilo' => $estilo, 'exp' => $experiencia, 'altura' => $altura, 'peso' => $peso, ); $updated = $wpdb->insert( $table, $data ); if ( ! $updated ) { $wpdb->print_error(); } } //CONECT WITH DATABASE TO DO THE SELECT include "db.php"; function BuscaAlgo($conexao){ // QUERY + INNER JOIN IN DATABASE $query = "SELECT USU.usuario, USU.nome, USU.exp, USU.altura, USU.peso, PRAN.exp_ref, PRAN.altura_ref, PRAN.peso_ref, PRAN.tipo_prancha, PRAN.tamanho_prancha, PRAN.meio_prancha, PRAN.litragem_prancha FROM DADOS_USUARIO AS USU INNER JOIN PRANCHA AS PRAN on USU.exp = PRAN.exp_ref WHERE USU.altura = PRAN.altura_ref AND USU.peso = PRAN.peso_ref ORDER BY USU.usuario DESC LIMIT 1"; $resultado = mysqli_query($conexao,$query); $retorno = array(); while($experiencia = mysqli_fetch_assoc($resultado)){ $retorno[] = $experiencia; } return $resultado; } //DISPLAYS THE QUERY TO USER $resultado = array(); $resultado = BuscaAlgo($conexao); foreach($resultado as $valor){ echo $valor["usuario"]; print(". . . ."); echo $valor["nome"]; print(". . . ."); echo $valor["exp"]; print(". . . ."); echo $valor["altura"]; print(". . . ."); echo $valor["peso"]; print(". . . ."); print("///////"); echo $valor["tipo_prancha"]; print(". . . ."); echo $valor["tamanho_prancha"]; print(". . . ."); echo $valor["meio_prancha"]; print(". . . ."); echo $valor["litragem_prancha"]; } die(); //END THE EXECUTION } //ADD THE AJAX HOOKS IN WORDPRESS add_action('wp_ajax_prancha', 'prancha'); add_action('wp_ajax_nopriv_prancha', 'prancha');
Код комментирует, в основном я сделал:
AJAX:
ФУНКЦИИ: Я делаю регистрационный код в базе данных, выполняю запрос и печатаю с помощью echo
.
AJAX
возвращает мне сообщение об ошибке.
Как я могу это решить?
Что я делаю не так?
Примечание1. Когда я вставляю код, который находится в моих «функциях» , the registration code, the query and the
эхо-сигнал для отображения в прямом виде, в моем footer.php
, он работает. Поэтому мы можем понять, что ошибка даже не в коде вставки, запроса или отображения.
ПРИМЕЧАНИЕ 2: Я хочу отобразить возврат базы данных в modal boostrap
. Сначала я просто показываю на экране, чтобы проверить, все ли в порядке. После этого я буду исследовать, как помещать эти данные в modal
, хотя и не основной предмет сообщения, также приветствуются предложения о том, как это сделать.
Прежде всего, вы должны использовать объект $ wpdb для доступа к базе данных в WordPress, включая выбор. Проверьте документацию https://codex.wordpress.org/Class_Reference/wpdb
Вы не указали, какую ошибку вы получите, но я думаю, что ваше определение вызова ajax неверно, это должно быть:
data: { action : 'prancha' }
В коде есть некоторые ошибки, но вы просто пропустили очень важную часть кода,
чтобы заставить его работать, wp_localize_script()
:
add_action('wp_enqueue_scripts', 'meu_ajax_scripts'); meu_ajax_scripts(){ // Register your script (located in a subfolder `js` of your active theme, for example here) wp_enqueue_script( 'meuscript', get_template_directory_uri().'/js/ajax_script.js', array('jquery'), '1.0', true ); // Making the bridge between php and javascript: wp_localize_script( 'meuscript', 'meuajax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) ); }
Этот код находится в файле function.php вашей папки с активной темой (или дочерней темой) … Если это get_template_directory_uri()
тема, вы должны заменить get_template_directory_uri()
на get_stylesheet_directory_uri()
.
Как вы видите, 'meuscript'
находится в обеих функциях wp_enqueue_script()
и wp_localize_script()
.
Затем вы получите 'meuajax'
и 'ajaxurl'
в сценарии jQuery
.
Они объединены таким образом:
url: meuajax.ajaxurl,
вместо url: 'wp-admin/admin-ajax.php',
Функция wp_localize_script()
сделает мост через admin_url( 'admin-ajax.php' )
из вашего jQuery script
в вашу php
функцию …
(NEW UPDATE – NOVA ATUALIZAÇÃO)
относительно ваших комментариев, вашего ответа на вопрос / вопрос, и эта тема тоже …
Итак, вот ваш недавно обновленный код jQuery (с другим подходом, связанным с данными формы) . Все данные формы сериализуются перед отправкой на вашу prancha()
функцию prancha()
через ajax:
// We use jQuery instead of $. Thanks to Phill Healey (see comments). // Then we put back the $ shorthand in the function… jQuery(document).ready(function($){ // Now we can use $ shorthand, avoiding javascript errors (with wordpress). $('#enviar').submit(function(e){ // Updated var minhaprancha = $(this).serialize(); // serializing the form data e.preventDefault(); // preventing form submit normal behavior //ajax call $.ajax({ type: 'POST', action: 'prancha', url: meuscript.ajaxurl, // the functional url data: meuscript.minhaprancha, // all the data of the form (serialized) // Displaying succes message success: function( data ){ $('#result').html( 'Sucesso : '.data ); // for debugging purpose in browser js console console.log(data); }, // Displaying error message error: function( error ){ $('#result').html( 'Erro! : '. error ); // for debugging purpose in browser js console console.log(error); } }); }); });
Поместите этот код в js-файл ajax_script.js внутри подпапки js вашей активной темы (или дочерней темы).
Ваша форма html (пример вроде) должна быть такой же, как и эта:
<form method="post" id="minhaprancha"> // this id is important too (no "action" needed) <label for="Seu nome">From *</label> <input name="nome" id="nome" type="text" class="form-control" placeholder="Seu nome" required> <br /> <label for="Seu email">From *</label> <input name="email" id="email" type="email" class="form-control" placeholder="Seu email" required> <br /> <label for="Seu estilo">From *</label> <input name="estilo" id="estilo" type="text" class="form-control" placeholder="Seu estilo" required> <br /> <label for="Seu experiencia">From *</label> <input name="experiencia" id="experiencia" type="text" class="form-control" placeholder="Seu experiencia" required> <br /> <label for="Seu altura">From *</label> <input name="altura" id="altura" type="text" class="form-control" placeholder="Seu altura" required> <br /> <label for="Seu peso">From *</label> <input name="peso" id="peso" type="text" class="form-control" placeholder="Seu peso" required> <br /> <?php // This imput hidden element has the name value of the php function ?> <input type="hidden" name="action" value="prancha"/> <input type="submit" id="enviar" name="enviar" value="Enviar"> </form> <div id="result" class="result"></div>
Затем вы получите (как вы уже знаете) значения данных в вашем php с:
$nome = $_POST['nome']; $email = $_POST['email']; $estilo = $_POST['estilo']; $experiencia = $_POST['experiencia']; $altura = $_POST['altura']; $peso = $_POST['peso'];
На этот раз это решение «под ключ», и оно будет работать , как только вы адаптируете свою форму к нему.
Рекомендации:
WordPress передает значение ajax на определенную страницу с помощью WordPress
Использование AJAX с PHP на вашем сайте WordPress без плагина
Как использовать Ajax с вашим плагином WordPress или Theme?
Как я могу получить данные формы с помощью JavaScript / jQuery?
WPSE – Пользовательская форма с Ajax
Во-первых, я благодарен за их готовность помочь.
Во-вторых, я предпочитаю искать больше о том, как решить мою проблему, прежде чем приходить сюда с обратной связью.
Код, который вы мне прислали, все еще не работает. Я внес некоторые изменения, и он работал по частям.
submit
for click
в моем jQuery, и я также заменил тип моей кнопки для text
. Я заменил this
из serialize()
для id моей формы.
jQuery (document) .ready (function ($) {$ ('# enviar'). click (function (e) {// Я заменил SUBMIT
для CLICK
var minhaprancha = $ ('# minhaprancha'). serialize (); // Я заменил THIS
для id моей формы
e.preventDefault(); // preventing form submit normal behavior $.ajax({ type: 'POST', url: meuajax.ajaxurl, data: meuajax.minhaprancha, success: function( data ){ $('#resultado').html( 'Sucesso : ' + data ); console.log(data); }, error: function( error ){ $('#resultado').html( 'Erro! : ' + error ); console.log(error); } }); });
});
С этими изменениями код работал, но не идеально. Я поставил alert
чтобы проверить, работает ли serialize()
и это !. Но в конце скрипта консоль браузера возвращает мне статус успеха, значение 0 и не выполняет функцию функции prancha()
. Данные не зарегистрированы в базе данных.
Я искал другие способы сделать код работы:
Получение значений полей, сохранение переменной и вызов ее в ajax. Оба сохраняют поля формы как переменную, объявленную в прямом поле data
и отображаются Внутренняя ошибка 500
jQuery(document).ready(function($){ $('#enviar').click(function(e){ var minhaprancha = '$nome='+$("#nome").val()+ '&email='+$("#email").val()+ '&estilo='+$("#estilo").val()+ '&experiencia='+$("#experiencia").val()+ '&altura='+$("#altura").val()+ '&peso='+$("#peso").val(); //GETTING THE VALUES OF FIELDS e.preventDefault(); // preventing form submit normal behavior $.ajax({ type: 'POST', url: meuajax.ajaxurl, data: { action: 'prancha', minhaprancha }, success: function( data ){ $('#resultado').html( 'Sucesso : ' + data ); console.log(data); }, error: function( error ){ $('#resultado').html( 'Erro! : ' + error ); console.log(error); } }); }); });
Я также попытался вызывать значения полей формы в
data : {}
matrix и отображается ошибкаMaximum call stack size exceeded
.
jQuery(document).ready(function($){ $('#enviar').click(function(e){ e.preventDefault(); // preventing form submit normal behavior $.ajax({ type: 'POST', url: meuajax.ajaxurl, action: 'prancha', data: { 'nome':nome, 'email':email, 'estilo':estilo, 'experiencia':experiencia, 'altura':altura, 'peso':peso }, success: function( data ){ $('#resultado').html( 'Sucesso : ' + data ); console.log(data); }, error: function( error ){ $('#resultado').html( 'Erro! : ' + error ); console.log(error); } }); }); });
В моих
functions.php
я оставил только ту часть, которая вставляет данные в базу данных. Чтобы увидеть операцию в деталях. И помните, что, когда я помещаю этот код прямо в мойfooter.php
он отлично работает:
function meu_ajax_scripts(){ wp_enqueue_script( 'meuajax', get_template_directory_uri().'/consulta.js', array('jquery'), '1.0', true ); wp_localize_script( 'meuajax', 'meuajax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) ); } add_action('wp_enqueue_scripts', 'meu_ajax_scripts'); function prancha(){ if(!empty($_POST)){ $nome = $_POST['nome']; $email = $_POST['email']; $estilo = $_POST['estilo']; $experiencia = $_POST['experiencia']; $altura = $_POST['altura']; $peso = $_POST['peso']; cadastra_usuario($nome, $email, $estilo, $experiencia, $altura, $peso); } function cadastra_usuario($nome, $email, $estilo, $experiencia, $altura, $peso){ global $wpdb; $table = 'dados_usuario'; $data = array( 'nome' => $nome, 'email' => $email, 'estilo' => $estilo, 'experiencia' => $experiencia, 'altura' => $altura, 'peso' => $peso, ); $updated = $wpdb->insert( $table, $data ); if ( ! $updated ) { $wpdb->print_error(); } } die(); } add_action('wp_ajax_prancha', 'prancha'); add_action('wp_ajax_nopriv_prancha', 'prancha');
Я все еще исследую различные блоги, веб-сайты и форумы, которые пытаются его обработать.