WordPress admin-ajax.php 400 mauvaise requête

Publié par Jean-Michel le

J’ai un comportement étrange et frustrant du fichier wordpress admin-ajax.php, lorsque je fais une requête ajax, il renvoie une erreur 400 mauvaise requête.

(function( $ ) {
    var ajaxscript = { ajax_url : 'mydomain.com/wp-admin/admin-ajax.php' }
    $.ajax({
        url : ajaxscript.ajax_url,
        data : {
            action : 'cart_clb',
            id : 1
        },
        method : 'POST',
        success : function( response ){ console.log(response) },
        error : function(error){ console.log(error) }
    })
})(jQuery)

Et à l’intérieur de mon functions.php

add_action( 'wp_ajax_post_cart_clb', 'cart_clb' );
add_action( 'wp_ajax_nopriv_post_cart_clb', 'cart_clb' );

function cart_clb(){
    echo json_encode($_POST);
    die();
}

Comme dit plus haut lorsque j’exécute la requête :

mydomain.com/wp-admin/admin-ajax.php 400 (Bad Request)
{readyState: 4, getResponseHeader: ƒ, getAllResponseHeaders: ƒ, setRequestHeader: ƒ, overrideMimeType: ƒ, …}

Quelqu’un pourrait m’aider à plaire ? Merci.

Solution n°1 trouvée

J’ai modifié ton code et regarde ceci :

(function( $ ) {
var ajaxscript = { ajax_url : 'mydomain.com/wp-admin/admin-ajax.php' }
$.ajax({
    url : ajaxscript.ajax_url,
    data : {
        action : 'post_cart_clb',
        id : 1
    },
    method : 'POST', //Post method
    success : function( response ){ console.log(response) },
    error : function(error){ console.log(error) }
  })
})(jQuery)

Voici la syntaxe de WordPress ajax : wp_ajax_{Your_action_name} wp_ajax_nopriv_{Your_action_name}

Solution n°2 trouvée

Tout d’abord, utilisez une URL complète et absolue, avec un protocole (ou au moins une forme indépendante du protocole) :

var ajaxscript = { ajax_url : '//mydomain.com/wp-admin/admin-ajax.php' }

Deuxièmement, votre nom d’action ajax n’est pas le nom de la fonction de rappel php mais la partie dynamique du hook wp_ajax_{action_name} / wp_ajax_nopriv_{action_name}, donc dans votre cas, il devrait être :

data : {
    action : 'post_cart_clb',
    id : 1
},

Solution n°3 trouvée

Dans mon cas, j’utilise une approche basée sur les classes. Et j’ai trouvé que le problème était dû au fait que j’utilisais wp_ajax_ request dans le constructeur.

Si vous utilisez des méthodes ajax à l’intérieur de la classe, déplacez les poignées wp_ajax_ en dehors de la classe ( écrivez dans le fichier du plugin principal ) et transmettez le nom de la classe et le nom de la méthode. Par exemple:

add_action( 'wp_ajax_your_handle', [ 'Class_Name', 'function_name' ] );
add_action( 'wp_ajax_nopriv_your_handle', [ 'Class_Name', 'function_name' ] );

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *