Я делаю Ajax-вызов admin-ajax.php с синтаксисом fetch API. Вот код, который вызывает внутренний скрипт:
fetch(ajax_obj.ajaxurl, {
method: "POST",
mode: "cors",
cache: "no-cache",
credentials: "same-origin",
body: JSON.stringify(this.data),
headers: {
"Content-Type": "application/json"
}
})
и получение ответа 400 Bad Request.
Может кто подскажет, где этот запрос не тот?
Проверяя средства разработки сети в хроме, я вижу, что отправленное тело в порядке, URL-адрес также в порядке ... ... и насколько я знаю, коды состояния 4xx предназначены для ошибок на клиенте, поэтому я даже не смотрю на код на стороне сервера ... если я ошибаюсь, пожалуйста, дайте мне отзыв об этом ...
Собственно, у меня был вызов jQuery ajax следующим образом:
this.data = {
'action': 'ajax_product_query',
'locations': this.locations,
'type': this.category != '' ? this.category : [],
'all-locations': this.filters['locationFilter'].all.checked,
'page': ajax_obj.current_page
};
$.ajax({
url: ajax_obj.ajaxurl,
method: 'post',
dataType: 'json',
data: this.data,
beforeSend: function(xhr) {
button.innerHTML = 'Loading...';
},
success: (data) => { ...
... и это сработало как шарм ...
Затем, желая удалить зависимость jQuery, захотелось превратить вызов jQuery ajax в синтаксис Fetch API следующим образом:
fetch(ajax_obj.ajaxurl, {
method: "POST",
mode: "cors",
cache: "no-cache",
credentials: "same-origin",
body: JSON.stringify(this.data),
headers: {
"Content-Type": "application/json"
}
})
.then(response => response.json()) ...
И чем запросы превратились в 400 плохих запросов ...
Спасибо!
Какой именно код ... Я бы поделился внутренним скриптом, но, как я уже упоминал, процесс терпит неудачу из-за внешнего интерфейса ...
Хорошо, тогда устраивайся. Удачи!
Хорошо, я постараюсь дать еще несколько объяснений ... Спасибо
Вы нашли решение этой проблемы?





Потому что после запроса JS fetch POST вы не можете получить данные $ _POST в Php. Грязный раствор. Вы можете добавить этот код в u "/wp-admin/admin-ajax.php", чтобы решить эту проблему:
if ( !empty( trim( file_get_contents("php://input" ) ) ) ) {
$post = trim(file_get_contents("php://input"));
$_POST = ( array ) json_decode( $post );
$_REQUEST['action'] = $_POST['action'];
}
Или попробуйте найти лучшее решение. P.S. Извините за мой английский
Нам нужно увидеть больше вашего кода, чтобы помочь.