WordPress

admin-ajax.php 400 (złe żądanie) co robię źle?

  • 17 stycznia, 2024
  • 3 min read
admin-ajax.php 400 (złe żądanie) co robię źle?


Chcę dołączyć niestandardowy kod do strony z dynamicznymi wyborami. Do pisania PHP używam wtyczki fragmentów kodu. Ale teraz utknąłem z błędem ajax 400, gdy próbuję wybrać wartość. Walczę z tym problemem już od jakiegoś czasu i próbowałem wielu rzeczy, ogłupiając mój kod. Przeczytałem wiele postów na temat tego kodu błędu, nie wiem już, gdzie szukać…

Adres URL znajduje się na testowej „aktywnej” stronie internetowej, którą można znaleźć tutaj: Każda pomoc będzie bardzo mile widziana…

add_shortcode('choix_produits', 'wpcode_elementor_shortcode');

function wpcode_elementor_shortcode($atts) {
    global $wpdb;
    $admin_url = admin_url( 'admin-ajax.php' );
    echo "<form action=\"$admin_url\" method=\"post\" class=\"\">";
    
    echo '<select name="marques" id="marques">';

    $results = $wpdb->get_results("SELECT distinct(marque) FROM wpfir_module_bougies;");

    if ($results) {
        foreach ($results as $row) {
            echo '<option value="' . esc_attr($row->marque) . '">' . esc_html($row->marque) . '</option>';
        }
    } else {
        echo '<option value="">Aucune donnée trouvée</option>';
    }
    
    echo '</select>';
        
    echo '<select name="modeles" id="modeles"><option value="">Sélectionnez un modèle</option></select>';
    
    echo '</form>'; 
    
    $nonce = wp_create_nonce('my_nonce_action');

    // Ajout du script
    wp_register_script('script_bougies', content_url() . '/plugins/bougies/script_bougies.js', array('jquery'), '1.0', true);
    wp_localize_script('script_bougies', 'ajax_object', array('ajax_url' => admin_url('admin-ajax.php'),'nonce' => $nonce));
    wp_enqueue_script('script_bougies');
        
    add_action('wp_ajax_get_modeles', 'get_modeles_callback');
    add_action('wp_ajax_nopriv_get_modeles', 'get_modeles_callback');

    function get_modeles_callback() {
        /*$marque_selected = esc_sql($_POST['marque']);
        //error_log("marque : ".print_r( $marque_selected, true ) );
        $modeles = $wpdb->get_results($wpdb->prepare("SELECT distinct(modele) FROM wpfir_module_bougies where marque = %s", $marque_selected));

        if ($modeles) {
            $options_html="";
            foreach ($modeles as $modele) {
                $options_html .= '<option value="' . esc_attr($modele->modele) . '">' . esc_html($modele->modele) . '</option>';
            }
        } else {
            echo "<option value="">Aucune donnée trouvée</option>";
        }
        
        

        echo $options_html;*/
        echo "<option value="">test</option>";
        wp_die();
    }


}
jQuery(document).ready(function ($) { 
    $('#marques').on('change', function() {
        var marqueSelected = $(this).val();

        $.ajax({
            url: ajax_object.ajax_url,
            type: "POST",
            dataType: "json", 
            data: {
                action: "get_modeles", 
                marque: marqueSelected,
                nonce: ajax_object.nonce
            },
            success: function(response) {
                alert('youpi');
                $('#modeles').html(response);
            },
            error: function(xhr, status, error) {
                console.error(status + ': ' + error);
            }
        });
    });
});


Źródło

Warto przeczytać!  Jak zatrzymać lustrzane odbicie zdarzeń JS w krótkich kodach umieszczonych na tej samej stronie?