使用AJAX从javascript调用Perl脚本

使用AJAX从javascript调用Perl脚本,javascript,ajax,perl,webserver,cgi,Javascript,Ajax,Perl,Webserver,Cgi,我想从javascript调用一个perl脚本。我使用AJAX尝试过这一点: function create_request(obj) { var req = \"id=\"+0; var req_http =new XMLHttpRequest(); req_http.open(\"POST\", \"create_file.pl\", false); req_http.setRequestHeader(\"Content-type\", \"application/x-www

我想从javascript调用一个perl脚本。我使用AJAX尝试过这一点:

function create_request(obj) {
  var req = \"id=\"+0;
  var req_http =new XMLHttpRequest();
  req_http.open(\"POST\", \"create_file.pl\", false);
  req_http.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\");
  req_http.send(req);
  req_http.onreadystatechange = function() {
   if (req_http.readyState == 4) {
     var resp=req_http.responseText;
     document.write(resp); // *** echoes the content of create_file.pl
   }
  }
 }
创建_file.pl:

#!/usr/bin/perl
#
#
use strict;
use warnings;
use CGI;

my $cgi = CGI->new;

open FILE, ">>file.txt" or die $!;
print FILE "aaa";
close(FILE);

print $cgi->header('text/plain;charset=UTF-8');
print 0;
perl脚本只创建一个文本文件

javascript调用perl脚本后,返回结果的打印是create_file.pl的全部内容,而不是创建file.txt文件

javascript调用perl脚本后,返回结果的打印是create_file.pl的全部内容,而不是创建file.txt文件

然后:

  • 您正在本地文件系统上工作,而不是通过Web服务器或
  • 您尚未将服务器配置为将Perl程序视为CGI而不是静态文件
这与AJAX无关 如果从AJAX调用返回perl文件的内容,这意味着您的web服务器没有配置为处理perl(Javascript正在正确访问该位置,否则您将得到404)

至于如何做到这一点,在不了解服务器的情况下很难说。通常,您需要设置一个规则,将对
.pl
文件的请求传递给CGI处理程序

在lighttpd(我使用的)中,这是:


如果您没有使用lighttpd,我建议您在服务器cgi上使用Google,并按照说明进行配置,通过perl解析这些文件。

当您从web服务器收到perl脚本的文本时,您希望web服务器执行脚本,那么您所拥有的就是配置错误的web服务器

您需要配置web服务器,以便它知道如何执行文件


通常,人们会将可执行文件与静态内容分开。然后将web服务器配置为允许执行executables目录中的程序。该配置的确切语法将取决于您正在运行的web服务器。

完全忽略AJAX,如果您在web浏览器中调用perl脚本会发生什么?
$HTTP["url"] =~ "/cgi-bin/" {
      cgi.assign = ( ".pl" => "/usr/bin/perl" )
}