Python CGI Ajax调用导致内部服务器错误

问题描述:

我试图步入Web开发世界,并且在理解为什么我的基本hello世界脚本失败时遇到了一些麻烦。我有一个简单的AJAX调用来返回一小段HTML的python cgi脚本,但是调用失败,我得到“Internal Server Error”作为错误信息。这里是我的代码:Python CGI Ajax调用导致内部服务器错误

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。

我会继续承认我可能需要一个“解释它,就像我五岁”的答案。谢谢!

+1

请..不要使用CGI。这太糟糕了。你可以在python中做webapps [** much,much nice **](http://flask.pocoo.org/) – ThiefMaster 2013-03-15 19:22:37

+1

我同意python CGI是可怕的;检查你的shbang头文件中是否有不必要的换行符或空格。从你的代码看来,头文件和第一个'print'之间有一个空行 - 在截断它之后再试一次。 – thkang 2013-03-15 19:23:18

+0

我已经删除了额外的行,无济于事。仍然得到相同的错误。 – egdetti 2013-03-15 19:31:14

我刚刚才通过删除WinSCP赋予服务器并重新上传我的CGI文件工作它新鲜而不是只是在更新之间覆盖它。除此之外,我确保它以文本而不是二进制文件形式上传。我怀疑这可能是问题,因为它可能是保留Windows文本文件格式。我相信一个新秀的错误。谢谢您的帮助。

在第一行末尾有一个斜线字符。在三重引号内,这是一个字面斜线。去掉它。

+0

这不是答案,虽然你是正确的,反斜杠是不合适的。 – 2013-03-15 20:02:38

+0

感谢您的收获,不知道那是如何结束的。但仍然没有工作。 – egdetti 2013-03-15 20:38:19

需要两个\ n在

打印结束 “的Content-Type:HTML文本/ \ N” 的

而不是一个。

尝试:打印“内容类型:text/html的\ n \ n”个

看到https://httpd.apache.org/docs/2.2/howto/cgi.html#writing

+0

我按照你的建议添加了一个额外的\ n,我仍然得到相同的错误。 – egdetti 2013-03-15 20:38:37