通过jQuery AJAX将数据发布到Python CGI脚本

时间:2013-12-21 21:55:09

标签: javascript python jquery cgi

我正在尝试设置一个简单的脚本,其中一些数据使用jQuery .ajax函数发送到Python CGI脚本。 Python脚本只会将数据发布到大写,然后将该数据返回到HTML文件,其中div将使用内容进行更新。

我有如下所示的代码。当我运行它时,执行AJAX调用,但是 div没有用内容更新。 div没有用正在发送的数据更新。

我如何修改此代码,以便更新所发送的数据?

我感谢任何帮助。

我的HTML代码:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=UTF-8">
    <title>Python-jQuery Example</title>
    <script src="http://code.jquery.com/jquery-2.0.3.js"></script>
    <script>
        $(function()
        {
            $.ajax({
                url: "http://localhost/cgi-bin/post.py",
                type: "post",
                datatype: "html",
                data: "here is data",
                success: function(response){
                        $("#div").html(response);
                        console.log("There is a response"); 
                }
            });
        });

    </script>
</head>
<body>
    <div id="div">Default Stuff</div>
</body>

我的Python代码:

#!/usr/bin/python

import cgi, cgitb 
cgitb.enable() 

data = cgi.FieldStorage()

print "Content-Type: text/html"
print data

编辑:我已将我的代码更新为当前显示的内容,现在文档使用此字符串进行更新:

FieldStorage(None, None, []) 

如何修改我的代码,以便div更新并发送数据?

3 个答案:

答案 0 :(得分:4)

我发现数据需要格式化为键值对,如下所示:

$.ajax({
            url: "http://localhost/cgi-bin/variousTests/post.py",
            type: "POST",
            data: {foo: 'bar', bar: 'foo'},
            success: function(response){
                    $("#div").html(response);
                }
       });

在Python脚本中,我使用此代码从POST请求中获取数据(如果使用GET请求,它的工作方式完全相同):

#!/usr/bin/python

import cgi, cgitb 
cgitb.enable()  # for troubleshooting

#the cgi library gets vars from html
data = cgi.FieldStorage()
#this is the actual output
print "Content-Type: text/html\n"
print "The foo data is: " + data["foo"].value
print "<br />"
print "The bar data is: " + data["bar"].value
print "<br />"
print data

答案 1 :(得分:1)

我相信$ .ajax中的“数据”应该像键值对的哈希。 尝试:

$.ajax(
....
  data: {
    a: "aa",
    b: "bb"
  }
...

如果你在div中看到类似的东西:

MiniFieldStorage('a', 'aa')

然后你应该通过以下方式访问它:

my_param = cgi.getfirst('a')

print "Content-Type: text/html\n"
print my_param

如果仍然无法正常工作,您可以通过GET而不是POST进行测试吗? 另外,您正在访问的AJAX文件的结构是什么? (是子目录中的文件吗?等等......)

答案 2 :(得分:0)

  1. 我认为您需要使用内容类型打印的换行符。

    print“Content-Type:text / html \ n”

  2. 此外,您需要为变量数据提供参数名称。假设您使用参数“param”发布值“xyz”。所以它应该是:数据[“param”] 在xyz所在的位置。

    打印数据[“xyz”]

  3. 如果错误仍然存​​在,则从浏览器浏览url localhost / cgi-bin / post.py并检查它返回的内容(当然还有GET参数进行测试)。

    < / LI>