Как перенести массив от javaScript в admin-ajax.php с помощью Fetch для обработкиJavascript

Форум по Javascript
Ответить
Anonymous
 Как перенести массив от javaScript в admin-ajax.php с помощью Fetch для обработки

Сообщение Anonymous »

Я боролся в эти дни при передаче массива данных в WordPress для обработки в admin-ajax.php. Я добавил кнопку в woocommerce Hook 'woocommerce_after_shop_loop_item', который содержит Data Product_id с классом кнопок. Моя проблема в том, что я получаю своего рода строгий массив «много раз» (с сбежавшими кавычками, показанными картинками). Моя цель-передать массив идентификаторов продуктов с кликами Admin-ajax.php и обработать этот массив. Я не могу сделать это, вероятно, из -за формата массива в качестве строки. Если я использую json_decode, я также получаю ошибку (в то время как он работает, если он тестируется в Localhost, а не в WordPress Envirennment). Если я сначала декодирует его и проверяю, есть ли идентификатор в массиве снова, он не работает. Что я делаю не так?
function ps_compare_products_add_enqueue(){
wp_enqueue_script('ps_script1', plugin_dir_url(__FILE__).'../script/script.js');
wp_localize_script('ps_script1','ps_object', array(
"ajax_url" => admin_url("admin-ajax.php")
));
}

function process_array_ids(){

if(isset($_POST['my_string_array']) && !empty($_POST['my_string_array'])){
$array = $_POST['my_string_array'];
//$array = json_decode($array); // if I add this I get null in my console which in not wordpress environment works
echo json_encode($array); // the only way I found to send back the array but in string format again

}

wp_die();
}

add_action('wp_enqueue_scripts','ps_compare_products_add_enqueue');

add_action('wp_ajax_my_array_ids_action', 'process_array_ids');

add_action('wp_ajax_nopriv_my_array_ids_action', 'process_array_ids');

```Javascript

document.addEventListener('DOMContentLoaded', function() {
let compareProducts = []
var compareButtons = document.querySelectorAll('.compare-button');
document.addEventListener('click', (e) => {
if(e.target.matches('.compare-button')){
var productId = e.target.dataset.product_id;
if (!compareProducts.includes(productId)) {
compareProducts.push(productId);
}
fetch_my_array(ps_object.ajax_url, 'POST', compareProducts)
}
});
})

async function fetch_my_array(url, post, myArray){
let myForm = new FormData()
let my_string_array = JSON.stringify(myArray)
myForm.append('action', 'my_array_ids_action')
myForm.append('my_string_array', my_string_array)

const options={
method: post,
body: myForm
}
const response = await fetch(url, options)
let result = await response.json()
console.log(response)
console.log(result)
// console.log(JSON.parse(result.replaceAll('\\"','')))

}


Подробнее здесь: https://stackoverflow.com/questions/794 ... -processin
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»