Переменная $_POST недоступна для вывода на стороне сервера
- Сайт на wordpress
- Посылаю ajax запрос методом
POSTчерезXMLHttpRequestне через форму а просто руками вбиваю параметры и делаю запрос сюда: http://dpk/wp-admin/admin-ajax.php?action=dpkhook - На стороне сервера вывожу:
echo json_encode($_POST); - Смотрю результат этого вывода здесь: http://dpk/wp-admin/admin-ajax.php?action=dpkhook
- Результат вывода:
[]- пустой массив - В тело ajax запроса передаю параметры так:
let params = 'myname=' + 'y est' + '&' + 'myname2' + 'grut'; - На фронте (произвольная страница, где js-скрипт отрабатывает) получаю ответ от сервера:
{
myname: 'y est',
myname2: 'grut'
}
*Если сделать проверку на стороне сервера типо:
if ($_POST['myname'] && $_POST['myname']=='y est') {
echo json_encode("DA");
} else {
echo json_encode("NET");
}
то на стороне сервера (на странице http://dpk/wp-admin/admin-ajax.php?action=dpkhook) выводится "NET",
а на фронт ответ от сервера приходит "DA"
*Если на стороне сервера состряпать запрос типа: $query = new WP_Query( $args );, то $query на стороне сервера выводится. $_GET тоже выводится: {"action":"dpkhook"}
Вопрос: почему переменную $_POST я на стороне сервера не могу вывести? $_POST['myname'], $_POST['myname2'] на стороне сервера тоже не выводятся. Это ограничение самого wp что ли, или $_POST теряется где-то по дороге?
P.S. file_get_contents("php://input"); не помогло
P.P.S. Код js и php:
"use strict";
document.addEventListener("DOMContentLoaded", pageLoadedHandler);
function pageLoadedHandler() {
console.log('завершена загрузка и построение DOM документа');
let params = 'myname=' + 'y est' + '&' + 'myname2=' + 'grut';
let my_url = myPlugin.ajaxurl + '?action=dpk2hook';
ajaxPost(my_url, params);
}
function ajaxPost(url, params) {
let request = new XMLHttpRequest();
request.onreadystatechange = function() {
if (request.readyState == 4 && request.status == 200) {
console.log(request.response);
}
}
request.open('POST', url);
request.responseType = 'json';
request.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
request.send(params);
}
<?php
/**
* Plugin Name: Ajax запросы для фильтра записей wpforms
*/
add_action('wp_ajax_dpk2hook', 'say_hello');
//для запросов от авторизованных пользователей используется хук wp_ajax_'nazvanie action'
function say_hello() {
echo json_encode($_POST);
wp_die();
}
add_action( 'wp_enqueue_scripts', 'my_asset', 9999 );
function my_asset() {
if (is_page( 2299 )) {
wp_enqueue_script('custom', plugins_url('custom.js', __FILE__), [], '1_4');
wp_localize_script('custom', 'myPlugin', [
'ajaxurl' => admin_url('admin-ajax.php'),
]);
}
}
Ответы (1 шт):
Мне так кажется, что просто мелкий косяк не дает правильно отправить данные на сервер. Вы говорите, что данные url-encoded, но где же они encoded?
myname=y est&myname2=grut
// вот это url-encoded
myname=y%20est&myname2=grut
Вполне возможно, что метод send() просто не может это отправить.