是否可以使用Python,AJAX和amp; CGI在一起

时间:2011-03-01 04:52:08

标签: python ajax cgi

我想要一个单击按钮的网页,使用AJAX我从python脚本中获取一个字符串,然后在段落HTML元素中显示该字符串。

我知道我可以通过使用Python,WSGI& AJAX(理论上我可以这样做),但它太难了。我对CGI& amp;蟒。

我可以使用CGI进行上述操作吗?

如果我可以如何使用python脚本,与使用CGI提供页面时完全相同?

这不起作用:

import cgitb; cgitb.enable()
import cgi
import os


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

input_data   = cgi.FieldStorage()
print "hello"

当我点击页面中的按钮时,没有任何反应我的CGI服务器(适用于cgi页面请求)可以给我一个http 501错误。

我的HTML&的javascript:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

        <script type="text/javascript">
        <!--
            function onTest( dest, params )
            {
                var xmlhttp;

                if (window.XMLHttpRequest)
                {// code for IE7+, Firefox, Chrome, Opera, Safari
                    xmlhttp=new XMLHttpRequest();
                }
                else
                {// code for IE6, IE5
                    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
                }

                xmlhttp.onreadystatechange=function()
                {
                    if (xmlhttp.readyState==4 && xmlhttp.status==200)
                    {
                        document.getElementById( "bb" ).innerHTML = xmlhttp.responseText;
                    }
                }

                xmlhttp.open("POST",dest,true);
                xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
                xmlhttp.send( params ); 
            }


        -->
        </script>
    </head>

    <body>

        <p id="bb"> abcdef </p>
        <a href="javascript:onTest('aaa.py', '')">Click it</a>

    </body>

    </html>

4 个答案:

答案 0 :(得分:5)

以下是3个文件[my.html,myCGI.py,myPyServer.py]。在Windows XP中,我将它们全部放在同一目录中,然后双击myPyServer.py并且工作正常。

my.html与你的html相同,但是:

yours: <a href="javascript:onTest('aaa.py', '')">Click it</a>
mine:  <a href="javascript:onTest('/myCGI.py', 'x=7')">Click it</a>

myCGI.py非常接近你的

import cgitb; cgitb.enable()
import cgi
import os

input_data  = cgi.FieldStorage()
if input_data:
    print "Content-Type: text/html\n"
    print "hello"
else:
    f = open('my.html', 'r'); s = f.read(); f.close()
    print "Content-Type: text/html\n"
    print s

myPyServer.py

import CGIHTTPServer
import BaseHTTPServer
import sys

class Handler(CGIHTTPServer.CGIHTTPRequestHandler):
    cgi_directories = ["/"]         #make sure this is where you want it. [was "/cgi"]

PORT = 8000

httpd = BaseHTTPServer.HTTPServer(("", PORT), Handler)

# see effbot http://effbot.org/librarybook/thread.htm
def runserver():
    print "serving at port", PORT
    httpd.serve_forever()

import thread
thread.start_new_thread(runserver, ())

print "opening browser"

import webbrowser  
url = 'http://127.0.0.1:8000/myCGI.py'
webbrowser.open_new(url)

quit = 'n'
while not(quit=='quit'):
    quit = raw_input('\n ***Type "quit" and hit return to exit myPyServer.*** \n\n') 


print "myPyServer will now exit."

sys.exit(0)    

答案 1 :(得分:4)

当然,如果需要,您可以使用普通的旧CGI。你的代码对我来说很好。 (单击链接时,“abcdef”变为“hello”。)

您的设置中必须有一些简单的错误。我会检查您的测试脚本(a + rx)上的文件权限,这可能会被忽略。另外我假设你在cgi脚本的顶部有一个“#!/ usr / bin / env python”(或等效的)(在上面的例子中省略了它)。

答案 2 :(得分:0)

查看sajax:

http://www.modernmethod.com/sajax/

下载中有一个python库和示例。您可以拥有一个可以处理视图并实现任何AJAX调用的CGI脚本。

答案 3 :(得分:0)

这是一个使用Python CGI和ajax的简单示例。 http://www.ssiddique.info/writing-your-first-python-cgi-ajax-script.html