Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何通过ajax将表单数据发布到python脚本?_Javascript_Python_Ajax - Fatal编程技术网

Javascript 如何通过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.

我正在为一个python程序和一个ajax请求而挣扎。我试图从Javascript中获取一些数据到python程序中,这是我一直使用的常规方法。getfirst(字段名)不起作用,我假设这是因为请求是通过ajax进行的(对不起,我对所有这些都很陌生),所以我试着使用以下代码

Python:

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);
    }
 });