我正在尝试将我的数据库连接到我在 Forminator 上的输入字段。 基本上,我想要这种行为:
我写了一个WP插件:
<?php
/**
* Plugin Name: Estimao
* Description: Estimation de la valeur d'un bien immobilier. Cette extension permet d'estimer la valeur d'un bien immobilier.
* Version: 1.0
* Author: SK
* Author URI:
*/
// Fonction qui effectue la recherche dans la base de données
function recherche_donnees($requete, $table, $colonne) {
global $wpdb;
$resultats = $wpdb->get_results(
$wpdb->prepare( "SELECT $colonne
FROM $table WHERE $colonne
LIKE %s
ORDER BY $colonne
DESC", $wpdb->esc_like($requete) . '%' )
);
$count = 0;
foreach ($resultats as $resultat) {
$aff[$count] = $resultat->NOM_COMMUNE;
$count += 1;
}
// // On renvoie les résultats de la recherche
// return $resultats;
// On renvoie les résultats de la recherche en format JSON
if ( $resultats ) {
return json_encode($aff);
} else {
$error = new WP_Error( '001', 'Aucun résultat trouvé.', 'Veuillez recharger la page' );
wp_send_json_error( $error );
}
}
function ajouter_autocomplete() {
// Vérifier si jQuery est déjà chargé
if ( ! wp_script_is( 'jquery', 'enqueued' ) && ! wp_script_is( 'jquery', 'done' ) ) {
// Si ce n'est pas le cas, charger la bibliothèque jQuery
wp_enqueue_script( 'jquery' );
}
// Charger jQuery UI Autocomplete
wp_enqueue_script( 'jquery-ui-autocomplete' );
// Passer admin-ajax.php au script personnalisé
wp_enqueue_script( 'script-recherche', plugin_dir_url( __FILE__ ) . 'js/script-recherche.js', array( 'jquery' ) );
wp_localize_script( 'script-recherche', 'myAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
// }
}
add_action( 'wp_enqueue_scripts', 'ajouter_autocomplete' );
// Fonction qui ajoute le code JavaScript pour la recherche de données
function recherche_donnees_script() {
?>
<script>
jQuery(document).ready(function($) {
// On ajoute l'attribut "data-autocomplete" à tous les champs de saisie de texte
$('input[name="text-1"]').attr('data-autocomplete', 'wp_estimao_dvf_communes:NOM_COMMUNE');
// On initialise la recherche de données
$('input[data-autocomplete]').each(function() {
var champ = $(this);
var table_colonne = champ.attr('data-autocomplete').split(':');
var table = table_colonne[0];
var colonne = table_colonne[1];
champ.autocomplete({
source: function(requete,response) {
$.ajax({
url: myAjax.ajaxurl,
type: 'GET',
data: {
action: 'recherche_donnees',
table: table,
colonne: colonne,
requete: requete.term
},
success: function(resultats) {
response(resultats);
// Si des résultats sont retournés, les ajouter à la liste déroulante
if (resultats) {
} else {
$('input[name="text-1"]').html('<option value="">Aucun résultat</option>');
}
},
error: function() {
console.log('Une erreur est survenue');
console.log(requete);
console.log(resultats);
}
});
},
minLength: 3
});
});
});
</script>
<?php
}
// On ajoute l'action pour la recherche de données
add_action('wp_ajax_recherche_donnees', 'recherche_donnees');
add_action('wp_ajax_nopriv_recherche_donnees', 'recherche_donnees');
// On ajoute le code JavaScript pour la recherche de données
add_action('wp_head', 'recherche_donnees_script');
我收到这个错误:
Uncaught ReferenceError: resultats is not defined
at Object.error ((index):162:21)
at c (jquery.min.js?ver=3.6.1:2:28327)
at Object.fireWith [as rejectWith] (jquery.min.js?ver=3.6.1:2:29072)
at l (jquery.min.js?ver=3.6.1:2:80070)
at XMLHttpRequest.<anonymous> (jquery.min.js?ver=3.6.1:2:82499)
我非常需要帮助......变量
$resultats
似乎在函数内部工作recherche_donnees()
但是通过ajax请求调用的相同函数没有给出任何结果(即错误)
我尝试了 ajax 请求中所有可能的变量,但没有结果。总是返回“错误”。
基本上是在错误消息中说“resultats”未定义。您没有在脚本中使用此名称创建任何变量。您可以像这样使用“数据”:
success: function (data, textStatus, XMLHttpRequest) {
alert(data);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
}
但是不调试很难修复