Запуск сценария Python с использованием AJAX Javascript-запроса на локальном сервере с использованием vanilla JS - PullRequest
0 голосов
/ 24 января 2019

У меня есть среда localhost, работающая с использованием Python SimpleHTTPServer, работающий на порту 8080.

Мой проект состоит из файла HTML, сценария Python и сценария Javascript (vanilla).

Я хочу использовать следующий метод:

  • Нажать кнопку в HTML
  • Кнопка запускается Javascript AJAX-запрос
  • AJAX-запрос запускает скрипт Python
  • Сценарий Python создает JSON и возвращает его в Javascript

Мой JS выглядит следующим образом:

var json;

function trigger() {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        json = xhttp.responseText;
        console.log(json);
    }
  };
  xhttp.open("GET", "./request.py", true);
  xhttp.send();
}

Прямо сейчас, вместо просмотра выходных данных скрипта Python, я просто вижу содержимое (в виде текста) файла Python.

I 'Я не уверен в правильности вызова AJAX для запуска .py скрипта, а не просто для его чтения и возврата содержимого.

Любая помощь будет принята с благодарностью!

Ответы [ 3 ]

0 голосов
/ 24 января 2019

SimpleHTTPServer обслуживает только содержимое файла.Если вы хотите выполнить скрипт и вернуть вывод, вам нужно CGIHTTPServer .

Обратите внимание, что оба модуля были объединены в http.server в Python 3.

0 голосов
/ 24 января 2019

Вы можете использовать SocketServer вместо сервера по умолчанию. Добавьте обработчик в SocketServer. Вместо GET выполните POST с фактической командой для запуска. Обработчик может проверить почтовый запрос и запустить необходимый скрипт.

0 голосов
/ 24 января 2019

Вам необходимо изменить строку: xhttp.open("GET", "./request.py", true); на xhttp.open("GET", "http://localhost:3333/<your-route>", true);.<your-route> определено в вашем файле Python, и я предполагаю, что веб-сервер Python работает на порту 3333.

Если вы используете Flask и определяете маршрут, например, с помощью: @app.route("/endpoint"), запрос должен выглядеть следующим образом: xhttp.open("GET", "http://localhost:3333/endpoint", true);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...