J'essaie de créer un ajaxform sur la face avant. J'utilise le code
jQuery.ajax(
{
type: "post",
dataType: "json",
url: ajaxurl,
data: formData,
success: function(msg){
console.log(msg);
}
});
pour lequel je reçois une erreur
Uncaught ReferenceError: ajaxurl is not definedworklorAjaxBookForm @
?page_id=2:291onclick @ ?page_id=2:202
Tout en utilisant un code similaire sur le backend admin fonctionne. Quelle URL dois-je utiliser pour traiter la demande ajax?
Dans le backend, il existe une variable globale ajaxurl
définie par WordPress lui-même.
Cette variable n'est pas créée par WP dans le frontal. Cela signifie que si vous voulez utiliser AJAX appels en front-end, vous devez alors définir vous-même cette variable.
Une bonne façon de faire est d’utiliser wp_localize_script
.
Supposons que vos appels AJAX se trouvent dans le fichier my-ajax-script.js
, puis ajoutez wp_localize_script pour ce fichier JS comme suit:
function my_enqueue() {
wp_enqueue_script( 'ajax-script', get_template_directory_uri() . '/js/my-ajax-script.js', array('jquery') );
wp_localize_script( 'ajax-script', 'my_ajax_object',
array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
}
add_action( 'wp_enqueue_scripts', 'my_enqueue' );
Après avoir localisé votre fichier JS, vous pouvez utiliser l’objet my_ajax_object
dans votre fichier JS:
jQuery.ajax(
{
type: "post",
dataType: "json",
url: my_ajax_object.ajax_url,
data: formData,
success: function(msg){
console.log(msg);
}
});
pour utiliser ajaxurl directement, dans votre fichier de plugin, ajoutez ceci:
add_action('wp_head', 'myplugin_ajaxurl');
function myplugin_ajaxurl() {
echo '<script type="text/javascript">
var ajaxurl = "' . admin_url('admin-ajax.php') . '";
</script>';
}
vous pouvez ensuite utiliser la variable ajaxurl
pour la demande ajax.