Невозможно проанализировать данные из скрипта Python CGI в PHP - PullRequest
0 голосов
/ 24 октября 2019

У меня есть PHP-скрипт, имеющий форму с двумя полями ввода. Моя страница должна передать эти два входных значения обратно в мой Python CGI script (Calculate.py), когда пользователь нажимает кнопку отправки, получает результат и печатает его обратно на ту же страницу PHP под моими полями ввода (без обновления страницы),

Я пробовал простые вызовы действий формы для скрипта, но они привели меня на новую страницу, то есть открытие моего собственного скрипта. Затем я прочитал ответы, в которых говорилось, что для динамического обновления страницы необходимо использовать JS & AJAX, и, таким образом, я создал функцию JS с именем python_process() в моем PHP-файле на основе этих рекомендаций.

Однако, когда я в данный момент нажимаю кнопку отправить, под моими полями ввода ничего не появляется.

Я также пытался отладить это, просматривая консоль разработчика, но там ничего не появляется.

Вот мой PHP-код:

    <?php

    print "<html>";
    print "<script type=\"text/javascript\" src=\"http://code.jquery.com/jquery-1.4.4.min.js\"></script>";
    print "<script>
    function python_process() {
        var cancellationrate = $('input[name=cancellationrate]').val();
        var waitingtime = $('input[name=waitingtime]').val();
        $.ajax({
            url: \"/cgi-bin/calculate.py\",
            type: \"POST\",
            contentType: \"application/x-www-form-urlencoded\",
            data: {\"cancellationrate\" : cancellationrate, \"waitingtime\": waitingtime },
            success: function(response){
                        $(\"#result\").html(response);
                    }
            });
    };
    </script>";
    print "<link rel=\"stylesheet\" href=\"https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css\" integrity=\"sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T\" crossorigin=\"anonymous\">
    ";
    print "<br/>";
    print "<div class=\"container\">";
                print "<form name=\"calculate\" id=\"calculate\" method=\"post\">";
                    print "<div class=\"form-group row\">";
                        print "<label for=\"cancellationrate\" class=\"col-sm-2 col-form-label\">Cancellation Rate</label>";
                        print "<div class=\"col-lg-10\">";
                            print "<input type=\"text\" style=\"width: 400px\" class=\"form-control\" name=\"cancellationrate\" id=\"cancellationrate\" placeholder=\"Expected % Change in Cancellation Rate\">";
                        print "</div>";
                    print "</div>";
                    print "<div class=\"form-group row\">";
                        print "<label for=\"waitingtime\" class=\"col-sm-2 col-form-label\">Waiting Time</label>";
                        print "<div class=\"col-lg-10\">";
                            print "<input type=\"text\" style=\"width: 400px\" class=\"form-control\" name=\"waitingtime\" id=\"waitingtime\" placeholder=\"Expected % Change in Waiting Time\">";
                        print "</div>";
                    print "</div>";
                    print "<center><button type=\"button\" onclick=\"python_process()\" class=\"btn btn-primary\">Submit</button></center>";
                print "</form>";
    print "</div>";

    print "<div id=\"result\"></div>";


    ?>

А вот мой CGI-скрипт Calculate:

#!/anaconda3/bin/python3

import cgi
print ("Content-type: text/html\n\n")

data = cgi.FieldStorage()

cancellation_rate =  int(form.getvalue('cancellationrate'))
waitingtime = int(form.getvalue('waitingtime'))

result = cancellation_rate * waitingtime

print(result)

1 Ответ

0 голосов
/ 24 октября 2019

Оказывается, это была очень маленькая ошибка в моем скрипте Python, где я определяю свое хранилище полей CGI как переменную с именем data и пытаюсь получить доступ к ее значению с помощью формы.

Кроме того, этот вопрос помог ответить на мое значение div без обновления!

Обновить div с помощью jQuery ajax response html

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