WordPress admin-ajax.php 400 mauvaise requête
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' ] );
0 commentaire