Erro de código HTTP 400 ao utilizar AJAX
我的插件包含一个函数,调用该函数来创建插件页面。它通过标准 JS 模态窗口向用户请求 3 个输入参数,但在将参数传输到服务器时出现问题。我正在通过请求发送 AJAX 参数,并在服务器端创建 AJAX 请求持有者。我已经搞不清楚错误可能是什么了。请懂的人帮帮忙
//Выводим страницу с урезанной кнопкой установки
function ai_parser_non_sudo_install_python_page() {
//Обработка POST запроса через AJAX
add_action(‘wp_ajax_python_install’, function () {
//Если AJAX запрос получен верно
if (isset($_SERVER[‘HTTP_X_REQUESTED_WITH’]) && strtolower($_SERVER[‘HTTP_X_REQUESTED_WITH’]) === ‘xmlhttprequest’) {
//Если пользователь авторизован
if (is_user_logged_in()) {
//Получаем параметры формы
$docker_access_method = isset($_POST[‘docker_access_method’]) ? $_POST[‘docker_access_method’] : ”;
$docker_password = isset($_POST[‘docker_password’]) ? $_POST[‘docker_password’] : ”;
try {
//Выполняем установку Docker с помощью функции ai_parser_non_sudo_install_python()
$result = ai_parser_non_sudo_install_python($docker_password, $docker_access_method);
//Отправляем ответ AJAX с сообщением об успешной обработке запроса и результатом установки
wp_send_json_success(array(
‘message’ => ‘Docker installation request processed successfully’,
‘python’ => $result
));
//Запоминаем результат функции в сессии
$_SESSION[‘python_install_result’] = $result;
} catch (Exception $e) {
//Записываем сообщение об ошибке в журнал
error_log(“Error during Docker installation: ” . $e->getMessage());
//Отправляем ответ AJAX с сообщением об ошибке
wp_send_json_error(‘Failed to install Docker. Please check the logs for more details.’);
//Запоминаем сообщение об ошибке в сессии
$_SESSION[‘python_install_result’] = ‘Failed to install Docker: ‘ . $e->getMessage();
}
} else {
//Возвращаем ошибку
wp_send_json_error(‘Unauthorizated’);
//Запоминаем результат функции
$_SESSION[‘python_install_result’] = “Ошибка при запуске установки Python: Вы не авторизованы!”;
}
} else {
//Возвращаем ошибку
wp_send_json_error(‘Not AJAX request’);
//Запоминаем результат функции
$_SESSION[‘python_install_result’] = “Ошибка при запуске установки Python: AJAX запрос не распознан”;
}
exit;
});
//Диалог с пользователем
?><script>
//Холдеры ответов пользователя
let dockerPassword = null;
let dockerAccessMethod = null;
//Функция отправки параметров
function sendFormData(accessMethod, dockerPassword) {
//Создаем объект XMLHttpRequest
const xhr = new XMLHttpRequest();
//Устанавливаем URL сервера
xhr.open(“POST”, “<?php echo admin_url(‘admin-ajax.php’) ?>”, true);
//Устанавливаем заголовок для типа контента
xhr.setRequestHeader(“Content-Type”, “application/json”);
//Отправляем запрос
xhr.send(JSON.stringify({
‘action’: ‘python_install’,
‘accessMethod’: accessMethod,
‘dockerPassword’: dockerPassword
}));
//Обработчик события для успешного ответа
xhr.onload = function() {
if (xhr.status >= 200 && xhr.status < 400) {
//Обработка ответа сервера
const response = JSON.parse(xhr.response);
console.log([${xhr.status}] Server response: ${response}(英文):
} else {
//返回错误
console.error( [${xhr.status}] Error: ${xhr.statusText});
}
};
//返回结果
xhr.onerror = function() {
//返回结果
console.error(“[Error] 发送数据失败”);
};
}
//实现多个组件
document.addEventListener(‘DOMContentLoaded’, function() { //设置 Docker 组件 new Promise((resolve, rejection) => { setTimeout(() => { //设置 Docker 组件的组件类型为 JavaScript new Promise((resolve, rejection) => { setTimeout(() => { //设置 Docker 组件的组件类型为 JavaScript new Promise((resolve, rejection) => { setTimeout(() => { //设置 Docker 组件的组件类型为 JavaScript new Promise((resolve, rejection) => { setTimeout(() => { //设置 Docker 组件的组件类型为 JavaScript new Promise((resolve
, rejection) => { setTimeout(() => { Docker const useDocker = confirmed(‘是否要使用 Docker?’); resolve(useDocker); }, 0); }) .then((useDocker) => { if (useDocker) { //从 Docker 中获取信息 return new Promise((resolve, rejection) => { setTimeout(() => { //解决来自 Docker 的密码 dockerPassword = prompt(‘解决来自 Docker 的密码,否则会失败’, ”); //解决来自 Docker 的密码 if (dockerPassword ! == null) { resolve(dockerPassword); } else { rejection(null); } }, 0); }); } else { //来自 Docker 的反馈 return Promise.reject(‘Docker isn’t in use ‘); } }) .then((密码) => { //使用 Docker 服务的方法 return new Promise((resolve, rejection) => { setTimeout(() => { //使用 Docker 服务的方法 dockerAccessMethod = prompt(‘登录 Docker 服务。(名称:ssh localhost – p222)’, ”); //定义有效的方法 if (dockerAccessMethod !== null) { resolve(dockerAccessMethod); } else { rejection(null); } }, 0); }); }) .then((accessMethod) => { //执行 sendFormData(accessMethod, dockerPassword); }) .catch((error) => { //执行 sendFormData(null, null); }); }); <?php复制代码
Comentários
Adicionar comentário-
A lista de comentários está vazia