En dépit de nombreux postes similaires, toutes les solutions proposées ne m'ont pas fonctionné, alors nous voici.
J'ai le script suivant:
jQuery('#term').keyup(ajaxChange);
function ajaxChange(){
var newFormChange = jQuery("#term").val();
alert (newFormChange);
jQuery.ajax({
type:"POST",
action: "my_test_action",
url: "/wp-admin/admin-ajax.php",
data: newFormChange,
success:function(data){
console.log(data);
}
});
return false;
}
Et le PHP ressemble à ceci:
function my_test_action() {
$var = "this is a test";
wp_send_json($var);
die();
}
add_action( 'wp_ajax_my_test_action', 'my_test_action' );
add_action( 'wp_ajax_nopriv_my_test_action', 'my_test_action' );
J'ai aussi essayé: echo json_encode($var)
ou echo $var
, au lieu de wp_send_json()
mais la fonction renvoie toujours 0 dans la console du navigateur!
Mes autres appels AJAX fonctionnent, par exemple, j'en ai un autre qui appelle un script PHP qui appelle une requête WP et affiche des publications, tout fonctionne bien.
EDIT: Voici comment mon script est inclus:
function add_js() {
if (is_page_template()) {
wp_enqueue_script( 'mycustomscript', get_stylesheet_directory_uri().'/js/mycustomscript.js', array('jquery'), '1.0', true );
wp_localize_script('mycustomscript', 'ajaxurl', admin_url( 'admin-ajax.php' ) );
}
}
add_action('wp_enqueue_scripts', 'add_js');
Je pense que le problème vient de la variable newFormChange
, parce que jQuery(this).serialize();
n'a pas fonctionné en premier lieu, car le formulaire n'est pas soumis, mais seulement l'un de ses champs change. Je l'ai donc remplacée par var newFormChange = jQuery("#term").val();
mais il y a peut-être un problème avec url: "/wp-admin/admin-ajax.php"
Où est-ce que je me trompe? Merci
Notez que la action
devrait être à l'intérieur de la clé data
. Dans votre demande de publication, il n'y a pas de clé nommée action
, par conséquent, la fonction de rappel n'est jamais appelée.
Considérez cet exemple: -
jQuery.ajax({
type:"POST",
url: "/wp-admin/admin-ajax.php",
data: {
action: "my_test_action",
form_data : newFormChange
},
success: function (data) {
console.log(data);
}
});
Remarque: N'utilisez jamais d'URL Ajax relative comme /wp-admin/admin-ajax.php
. Vous pouvez utiliser wp_localize_script()
. Voir ces exemples
Il semble qu'il y ait un problème avec at url: "/wp-admin/admin-ajax.php"
; essayez plutôt d'ajouter le chemin complet:
function addajaxurl() {
wp_localize_script( 'frontend-ajax', 'frontendajax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' )));
}
add_action( 'wp_enqueue_scripts', 'addajaxurl' );
et appelez la variable dans votre fonction ajax:
jQuery.ajax({
type:"POST",
url: ajaxurl,
data: newFormChange,
success:function(data){
console.log(data);
}
});
le problème est dans le paramètre action. Dans votre fonction javascript, essayez:
var newFormChange = jQuery("#term").val();
jQuery.ajax({
type: "POST",
url: "/wp-admin/admin-ajax.php",
data: {
action: "my_test_action",
newFormChange: newFormChange
} ,
success: function(data) {
console.log(data);
alert(data);
});
Vous devriez également retirer die (); de votre fonction php. C'est déjà dans le wp_send_json.