Python CGI Ajax 调用导致内部服务器错误
我正在尝试进入网页开发的世界,但我遇到了一些麻烦,搞不懂为什么我的基本“你好,世界”脚本会失败。我有一个简单的AJAX调用,去请求一个返回少量HTML的Python CGI脚本,但结果调用失败,显示“内部服务器错误”的信息。以下是我的代码:
Python脚本:
#!/usr/local/bin/python
print "Content-Type: text/html\n"
print """\
<html>
<body>
<h2>Hello World!</h2>
</body>
</html>
"""
AJAX调用:
$(function(){
$('#clickme').click(function(){
$.ajax({
url: "cgi-bin/ajaxpost.cgi",
dataType: "html",
type: "POST",
success: function(response){
alert(response);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
}
});
});
});
这是我的服务器错误日志的内容:
CGI ERROR: A system problem prevented your request from being completed., referer: [my test page]
Premature end of script headers: ajaxpost.cgi, referer: [my test page]
我仔细检查过我的服务器,发现“#!/usr/local/bin/python”是正确的Python路径。此外,他们说没有专门的cgi-bin文件夹,任何CGI脚本只要有.cgi扩展名就可以在任何文件夹中运行。编辑:我也已经允许在服务器上执行.cgi文件。
我承认我可能需要一个“像我五岁一样解释”的答案。谢谢!
3 个回答
1
在
print "Content-Type: text/html\n"
的结尾,你需要加两个\n,而不是一个。
试试这样写:print "Content-Type: text/html\n\n"
可以查看这个链接了解更多信息:https://httpd.apache.org/docs/2.2/howto/cgi.html#writing
1
你在第一行的末尾有一个斜杠字符。在三重引号里面,这个斜杠是字面意思的。把它去掉。
1
我刚刚通过在WinSCP上删除我的.cgi文件,然后重新上传一个新的文件来解决了这个问题,而不是在更新时直接覆盖它。此外,我还确保上传的是文本格式,而不是二进制格式。我怀疑这可能是问题所在,因为可能是保留了Windows文本文件的格式。这真是个新手错误,感谢大家的帮助。