WP 通过 Ajax over PHP 自动完成输入字段

问题描述 投票:0回答:1

我正在尝试将我的数据库连接到我在 Forminator 上的输入字段。 基本上,我想要这种行为:

  • 用户在输入栏输入三个字母
  • javascript 检索输入的条目并通过 ajax/json 将其发送到数据库
  • 如果有匹配,它被发送到 UI

我写了一个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 请求中所有可能的变量,但没有结果。总是返回“错误”。

php ajax wordpress autocomplete
1个回答
0
投票

基本上是在错误消息中说“resultats”未定义。您没有在脚本中使用此名称创建任何变量。您可以像这样使用“数据”:

success: function (data, textStatus, XMLHttpRequest) {
    alert(data);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
    alert(errorThrown);
}

但是不调试很难修复

© www.soinside.com 2019 - 2024. All rights reserved.