using wp_localize instead of wp_add_line for ajax

This commit is contained in:
asus
2024-02-11 20:12:57 +01:00
parent 0a4185908b
commit 75bd922fd9
2 changed files with 23 additions and 21 deletions

View File

@@ -1,17 +1,15 @@
/* /*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
function that create an ajax post action
it can be "overloaded" with a callback_response and _error
*/ */
function ajax_post(ajax_data, action, callback_response, callback_error) { function ajax_post(ajax_data, action, callback_response, callback_error) {
console.log("in ajac_post, ajax_data :");
console.log(ajax_data);
const data = new FormData(); const data = new FormData();
data.append('action', action); data.append('action', action);
data.append('_ajax_nonce', nonce); data.append('_ajax_nonce', wp_ajax._nonce);
data.append('data', ajax_data); data.append('data', ajax_data);
console.log("data: ");
console.log(data);
fetch(ajax_url, { fetch(wp_ajax._url, {
method: 'POST', method: 'POST',
credentials: 'same-origin', credentials: 'same-origin',
body: data body: data

View File

@@ -5,11 +5,15 @@
/* /*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
function that add the ajax script to front function that add the ajax script to front
needs to check if already included : no real needs to check if already included :
- $handle is uniq so it will not be re-enqueued - $handle is uniq so it will not be re-enqueued
the first enqueued version would be kept the first enqueued version would be kept
- but the vars add to front would be added twice - if we used add_var_to_front() (which use wp_add_inline_script())
the vars would be added twice
leading to js syntaxe error (redeclaraiton of 'let' or 'const') leading to js syntaxe error (redeclaraiton of 'let' or 'const')
- but we use wp_localize_script() so the object will be overwritten
it's not a real pbm
(what is more efficient, check for double or overwritte object ?)
*/ */
function add_ajax_post() { function add_ajax_post() {
global $first_script; global $first_script;
@@ -17,22 +21,22 @@ function add_ajax_post() {
$file = init_file($ajax_file); $file = init_file($ajax_file);
// check if ajax script was already enqueued // // check if ajax script was already enqueued
global $wp_scripts; // global $wp_scripts;
$already_enqueued = array_search($file->handle, $wp_scripts->queue); // $already_enqueued = array_search($file->handle, $wp_scripts->queue);
if ($already_enqueued !== false) // if ($already_enqueued !== false)
return ; // return ;
$first_script = $file->handle; $first_script = $file->handle;
wp_enqueue_script( $file->handle, $file->url, $previous_js_basename, $file->version, true); wp_enqueue_script( $file->handle, $file->url, $previous_js_basename, $file->version, true);
$ajax_url = admin_url( 'admin-ajax.php' );
$nonce = wp_create_nonce( 'wp-pageviews-nonce' ); $_url = admin_url( 'admin-ajax.php' );
add_var_to_front( $_nonce = wp_create_nonce( 'wp-pageviews-nonce' );
compact( $vars = compact("_url","_nonce",);
"ajax_url", // add_var_to_front($vars);
"nonce", $object_name = "wp_ajax";
) wp_localize_script($file->handle, $object_name, $vars);
);
} }