Javascript 如何通过ajax将表单数据发布到python脚本?
我正在为一个python程序和一个ajax请求而挣扎。我试图从Javascript中获取一些数据到python程序中,这是我一直使用的常规方法。getfirst(字段名)不起作用,我假设这是因为请求是通过ajax进行的(对不起,我对所有这些都很陌生),所以我试着使用以下代码 Python:Javascript 如何通过ajax将表单数据发布到python脚本?,javascript,python,ajax,Javascript,Python,Ajax,我正在为一个python程序和一个ajax请求而挣扎。我试图从Javascript中获取一些数据到python程序中,这是我一直使用的常规方法。getfirst(字段名)不起作用,我假设这是因为请求是通过ajax进行的(对不起,我对所有这些都很陌生),所以我试着使用以下代码 Python: import MySQLdb import cgi, cgitb def index(req): # Create instance of FieldStorage form = cgi.
import MySQLdb
import cgi, cgitb
def index(req):
# Create instance of FieldStorage
form = cgi.FieldStorage()
# Get data from fields
dtbox = form.getvalue('dt')
tmbox = form.getvalue('tm')
con = MySQLdb.connect('localhost', 'root', '', 'mydb')
with con:
cur = con.cursor(MySQLdb.cursors.DictCursor)
s = "SELECT tmp, watts FROM currentcost WHERE dt ='" + dtbox + "' and tm like '" + tmbox + "%'"
cur.execute (s)
rows = cur.fetchall()
x=""
y=""
for row in rows:
x=x+row["watts"]+","
y=y+row["tmp"]+","
x="data:["+x+"]"
y="data:["+y+"]"
con.close()
req.write(x)
Javascript代码段:
function draw(handleResponse) {
$.ajax({
url: "/currentcost.py",
data: {dt: frm.dt, tm: frm.tm},
success: function(response){
handleResponse(response);
}
});
<form name="frm" target="ifrm">
<iframe name="ifrm" id="ifrm" style="display:none"></iframe>
<fieldset style="width:300px">
<legend>Chart Date and Time</legend>
Alter the date and time settings <br>
Date:
<select name="dt">
功能图(HandlerResponse){
$.ajax({
url:“/currentcost.py”,
数据:{dt:frm.dt,tm:frm.tm},
成功:功能(响应){
HandlerResponse(响应);
}
});
图表日期和时间
更改日期和时间设置
日期:
我希望表单值dt和tm被传输到python程序中,在那里它将把它们挑选出来,并在我的select查询中运行……我得到的只是一个空白:-(
谢谢你的帮助
Chris您的ajax调用应该是
类型的“POST”
,您可以使用.serialize()
对表单中的字段进行序列化
编辑
通常不应使用GET请求提交表单。也就是说,ajax GET应该如下所示:
$.ajax({
url: "/currentcost.py",
data: {dt: $("#dt").val(), tm: $("#tm").val() },
success: function(response){
handleResponse(response);
}
});
这假设您已将属性
id=“dt”
插入第一个元素和id=“tm”
进入第二个元素。我已经修复了您问题中的格式。请了解Java和Javascript之间的区别。您似乎没有在JS中定义frm
。它是在其他地方定义的吗?您应该显示位置。这与您的Javascript问题无关,但您当前的代码容易受到SQL注入的攻击。@Daniel抱歉,一定是太匆忙了,我确实理解Java和Javascript之间的区别。我编辑了上面的代码,并添加了几行引用表单定义的代码(我没有将整个页面作为它的巨大部分包括在内).我想我已经做了这么长时间了,我看不见树木了!!任何帮助都是徒劳的appreciated@Andre谢谢,我甚至还没有研究过SQL注入问题,因为它在我的Raspberry PI上运行并不是一个很大的优先事项,但我接受你的观点,一旦开始工作,我需要看看这些问题。谢谢,这就是其中的一天。前进一步后退两步!我添加了您的建议,但现在.py返回“方法未实现”…有什么想法吗?你在使用apache和mod_python吗?我问的原因是,做def index
和req.write
似乎是apache术语,而不是python和CGI。是的,我在使用apache2和mod_python。老实说,我正在通过互联网学习这一点,并结合我更传统的了解Windows和VB!如果我删除POST行并将数据行更改为“12345”我现在得到的错误是TypeError:无法连接'str'和'NoneType',但我可以看到传递的命令行是currentcost.py?12345。有没有办法在python脚本中解析数据并自己构造数据行?显然,在mod_python 3.2.10中修复了旧版本的mod_python中ajax POST的一个已知问题或更高版本。您使用的是什么版本?
$.ajax({
url: "/currentcost.py",
data: {dt: $("#dt").val(), tm: $("#tm").val() },
success: function(response){
handleResponse(response);
}
});