Erro de código HTTP 400 ao utilizar AJAX

onomatopeia. Respostas técnicas 13

我的插件包含一个函数,调用该函数来创建插件页面。它通过标准 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

Contactar-nos

020-2206-9892

QQ咨询:1025174874

Correio eletrónico: info@361sale.com

Horário de trabalho: de segunda a sexta-feira, das 9h30 às 18h30, com folga nos feriados

Serviço ao cliente WeChat
Para facilitar o registo e o início de sessão de utilizadores globais, cancelámos a função de início de sessão por telefone. Se tiver problemas de início de sessão, contacte o serviço de apoio ao cliente para obter assistência na ligação do seu endereço de correio eletrónico.