J'ai construit une fonction dans un plugin. Je voudrais l'appeler avec une fonction ajax jQuery.
La fonction est définie comme suit:
add_action( 'wp_ajax_my_test_ajax', 'my_test_ajax' );
add_action( 'wp_ajax_nopriv_my_test_ajax', 'my_test_ajax' );
function my_test_ajax() {
$resp = array('title' => 'here is the title', 'content' => ' here is the content') ;
wp_send_json($resp) ;
}
J'essaie ensuite d'appeler la fonction avec du javascript:
var target = 'http://' + window.location.hostname + '/wp-admin/admin-ajax.php' ;
var data = {
action: ' my_test_ajax'
} ;
var req = jQuery.post( target , data, function(resp) {
console.log(resp.responseText);
}) ;
}
Le site répond de admin-ajax.php. La réponse porte un en-tête '200 OK'. Le corps de la réponse est '0'.
Le codex me dit que je peux m'attendre à cette réponse si la valeur de 'action' dans le corps du message ne correspond pas au nom d'une fonction liée aux hooks wordpress ajax. Mais autant que je sache, je suis bien là-bas.
Je suis certain que la fonction est incluse dans mon fichier de plugin.
Quels sont les autres éléments essentiels dont j'ai besoin pour que cela fonctionne?
(Je ne veux pas m'inquiéter des nonces ou de la localisation de js à ce stade. Je veux juste obtenir une réponse de la fonction avant de continuer à construire)
$.ajax
est très simple et vous pouvez facilement ajouter plus de paramètres dans la ligne data: {action:'my_test_ajax'}
. Essayez ceci:
var target = 'http://' + window.location.hostname + '/wp-admin/admin-ajax.php';
$.ajax({
url: ajax,
data: {action:'my_test_ajax'},
type: 'post',
success: function(data){
console.log(data, data.title, data.content)
}
});
Assurez-vous que la target
pointe exactement sur admin-ajax.php
ou définissez une variable globale (ou utilisez un script localize) pour ajouter une variable dans laquelle vous stockez le chemin d'accès à admin-ajax.php
qui est admin_url('admin-ajax.php')
en cas de confusion.
$.ajax
analyse les données JSON par défaut. Si vous utilisez d'autres méthodes qui renvoient la réponse telles quelles (chaîne), utilisez simplement la méthode JSON.parse(response)
. JSON, c'est parce que vous utilisez wp_send_json($resp)
qui renvoie une réponse à un objet JSON dans le noeud final.
Voici un exemple d’ajout de données supplémentaires à la demande:
En utilisant la méthode append
avec la variable de données ou en la gardant courte et simple comme data: {action:'my_test_ajax', name: 'dave', network: 'wpse'}
et à partir de la fonction my_test_ajax
, vous pouvez obtenir ces données par $_REQUEST[tag]
et par exemple $_REQUEST['name']
.
$.get
($_GET
) méthode:
Celui-ci est encore plus simple et prend moins de code:
$.get( target = '/wp-admin/admin-ajax.php?action=my_test_ajax', function( data ) {
console.log( data )
});
N'oubliez pas d'utiliser $_REQUEST
dans votre script PHP car il fusionne tous les ensembles de données $_GET
, $_POST
et $_COOKIE
. À moins que vous ne soyez sûr de la méthode avec laquelle vous travaillez.
J'espère que cela pourra aider.
1) vous avez un espace supplémentaire dans le code, et c’est pourquoi il ne fonctionne pas:
action: ' my_test_ajax'
^
2) aussi, vous devez inclure check_admin_referrer()
!!!!!!!!!
function my_test_ajax() {
check_admin_referrer();
.........
.........
}