我有一个HTML页面,我将一些输入值传递给python脚本进行处理。我想要做的是显示计算结果。就在白页上。没有格式或任何东西。只是简单的数字。
问题是我只是一个空白页面,我无法弄清楚原因。
我做了很多研究,但没有一个解决方案适用于我的问题。
似乎正在传递和处理这些值,因为我没有收到错误消息,错误日志中也没有错误,也没有Web控制台中的任何指示。
我正在运行一个带有apache2的LAMP网络服务器。 apache2已正确配置为运行python和cgi。
HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Eval Main</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
</head>
<body>
<script type="text/javascript">
$(function()
{
$('#ok').click(function()
{
$.ajax(
{
url: "/cgi-bin/verlauf_Grenzen.py",
data:
{
a_test: $("#testa").val(),
v_test: $("#testv").val(),
s_test: $("#tests").val(),
j_test: $("#testj").val()
},
success: function(response)
{
handleResponse(response);
}
});
});
});
</script>
<form action="/cgi-bin/verlauf_Grenzen.py" method="POST">
<input id="testa" type="number" name="a" />
<input id="testv" type="number" name="v" />
<input id="tests" type="number" name="s" />
<input id="testj" type="number" name="j" />
<button id="ok" type="submit" value="Submit">Click</button>
</form>
</body>
</html>
verlauf_Grenzen.py
#!/usr/local/bin/python3.6
import json, time, glob, os
import numpy as np
from ruck import Cases
import cgi, cgitb
cgitb.enable()
print("Content-type:text/html\n")
def index(req):
form = cgi.FieldStorage()
a = form.getvalue('a_test')
v = form.getvalue('v_test')
s = form.getvalue('s_test')
j = form.getvalue('j_test')
cases = Cases(a,v,s,j)
#does something here
return x #x ist a single number
print("<html>")
print("<head>")
print("<title>CALC</title>")
print("</head>")
print("<body>")
print("<h2>Your name is {} </h2>".format(x))
print("</body>")
print("</html>")
req.write(x)
ruck.py
#!/usr/local/bin/python3.6
import cgi, cgitb
cgitb.enable()
class Cases(object):
def __init__(self, a, v, s, j):
self.a = a
self.v = v
self.s = s
self.j = j
# does something here (a few functions/methods)
return x, tj, ta, tv, tg, self.v, self.a
def __call__(self):
self.case_one()
self.case_two()
self.case_three()
self.case_four()
两个脚本都可以正常运行并且不会出错。 在此先感谢您的帮助。我是网络编程的新手。
答案 0 :(得分:1)
这里有一些问题,包括JS和Python。
首先,在JS方面,您的事件处理程序不会阻止表单的默认提交 - 您应该使用event.preventDefault()
。其次,您似乎没有定义在Ajax成功方法中调用的handleResponse()
函数。
在Python方面,您的verlauf_Grenzen
文件定义了index
函数,但似乎没有调用它。在该函数内部,有一个return x
语句中途无条件返回,因此打印响应的后续代码都不会被执行。
最后,如果你做的不仅仅是非平凡的工作,你应该考虑使用适当的Python微框架,比如Flask,而不是使用CGI。
答案 1 :(得分:0)
我是如何解决的:
的Python:
import json, time, glob, os
import numpy as np
from ruck import Cases
import cgi
form = cgi.FieldStorage()
a = form.getvalue('a_test')
v = form.getvalue('v_test')
s = form.getvalue('s_test')
j = form.getvalue('j_test')
cases = Cases(a,v,s,j)
# does something here (a few functions/methods)
json.dumps(somedata)
我的HTML中的ajax:
<script>
$(function(){
$('#btn2').click(function(){
$.ajax({
url: 'https://192.168.80.27/cgi-bin/verlauf_Grenzen.py',
type: 'post',
data: $.('.senddata').serialize(),
success: function(data) {
window.alert("Data sent!");
},
});
});
});
</script>
<input id="btn2" class="button" type="button" value="Send Values" value="Click"/>
<script>
$(function(){
$('#btn').click(function(){
$.ajax({
url: 'https://192.168.80.27/cgi-bin/verlauf_Grenzen.py',
type: 'json',
data: {},
success: function(data) {
var jsondata = JSON.stringify(data);
$('#xbtn').html(jsondata);
window.alert("Success!!!");
},
});
});
});
</script>
<input id="btn" class="button" type="button" value="Load results" value="Click"/>
<span id="xbtn"></span>