J'ai un comportement étrange et frustrant de wordpress admin-ajax.php, lorsque je fais une demande ajax, il renvoie 400 erreur de mauvaise demande.
(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 mes fonctions.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 indiqué ci-dessus lorsque j'exécute la demande:
mydomain.com/wp-admin/admin-ajax.php 400 (Bad Request)
{readyState: 4, getResponseHeader: ƒ, getAllResponseHeaders: ƒ, setRequestHeader: ƒ, overrideMimeType: ƒ, …}
Quelqu'un pourrait m'aider à plaire? Merci.
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}
, dans votre cas, cela devrait être:
data : {
action : 'post_cart_clb',
id : 1
},
J'ai modifié votre code et regardez 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)
Il s'agit de la syntaxe de WordPress ajax: wp_ajax_ {Your_action_name} wp_ajax_nopriv_ {Your_action_name}
En Vanilla JavaScript, vous obtenez une mauvaise demande si vous n'ajoutez pas cet en-tête à la demande POST:
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;');
Assurez-vous donc que jQuery ajoute également cet en-tête.