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

0 投票
2 回答
1798 浏览
提问于 2025-04-18 16:27

在我的代码里,有一个按钮,点击后会调用我写的一个JavaScript函数,叫做loadXMLdoc()。这个函数应该是创建一个xmlhttprequest,然后把这个请求发送到我写的一个.cgi脚本(用Python写的)。但是,它并没有让这个.cgi脚本执行。下面是我在index.html里写的JavaScript函数。

<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

在没有看到你的网页服务器配置的情况下,我们很难判断为什么请求没有被正确转发到你的 cgi-bin 脚本。建议你查看一下网页服务器的日志,看看每次访问后记录了什么。这可能会给你一些线索,帮助你找出为什么你的代码没有被调用。

另外,我只是随便猜测一下,你的 JavaScript 网址“可能”不正确。你能试试看吗?

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

注意:我在 cgi-bin 前面加了一个斜杠

0

确保你的cgi脚本有执行的权限(可以用chmod +x命令来设置),同时也要检查一下这个脚本是否有在目录中写入的权限。

撰写回答