如何使XMLHTTP请求执行python cgi脚本?

时间:2014-08-07 19:25:30

标签: jquery python ajax json cgi

在我的代码中,我有一个按钮,在单击时,调用我创建的javascript函数,名为loadXMLdoc()。这个函数应该创建一个xmlhttprequest并将该请求发送到我写的.cgi脚本(在python中)。但是,它不会导致.cgi脚本执行。下面是我的javascript函数(用我的index.html编写)。

<script>
    function loadXMLdoc() {
        var xmlhttp = new XMLHttpRequest();
        var url = "cgi-bin/run.cgi"
        xmlhttp.onreadystatechange = function () {
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                $.getJSON('cgi-bin/output.json', function(result) {
                    $.each(result, function(i, field) {
                        prompt(field[1]["firstName"])
                    }) 
                })              
            }
        }
        xmlhttp.open("GET", url, true);
        xmlhttp.send()
    }
</script>

这是我在名为“cgi-bin”的目录中的run.cgi脚本:

#!/usr/bin/env python
from os import system

system("rm output.json")
write_file = open("output.json", 'w')
write_file.write('{"employees":[\n')
write_file.write("\t" + '{"firstName":"John", "lastName":"Doe"},' + "\n")
write_file.write("\t" + '{"firstName":"Peter", "lastName":"Jones"}' + "\n")
write_file.write("]}")
write_file.close()

但是,当通过单击按钮调用loadXMLdoc()时,不会执行run.cgi。也就是说,它不会重写output.json。所以,此刻,点击按钮会显示“Peter”的提示。但是,如果我在上面的cgi脚本中将Peter改为Emily,那么如果我通过单击按钮调用loadXMLdoc(),则不会重写output.json。是不是将xmlhttprequest发送到.cgi应该导致cgi执行?

2 个答案:

答案 0 :(得分:0)

确保cgi脚本具有执行权限(chmod + x),并检查脚本是否具有在目录中写入的权限。

答案 1 :(得分:0)

如果没有看到您的网络服务器配置,则无法确定呼叫未被路由到您的cgi-bin脚本的原因。我建议您查看您的网络服务器日志,了解每次点击后记录的内容。这可能会让你知道为什么你的代码没有被调用。

另外,只是在黑暗中捅,但你的javascript网址&#34;可能&#34;不正确。你能试试吗?

    var xmlhttp = new XMLHttpRequest();
    var url = "/cgi-bin/run.cgi"

注意:我在 cgi-bin之前添加了正斜杠