perl cgi与javascript对话

时间:2013-04-15 04:57:28

标签: javascript database perl cgi xss

我想从一个在线数据库中检索csv文件。但是,由于一些XSS问题,我无法直接使用ajax,但需要在perl-cgi文件上进行中继。

我已经有了一个可以查询csv文件的perl-cgi文件,并将该文件的内容写入名为$ text的perl变量中。以下是一些代码段:

#!/usr/bin/perl

use strict;
use CGI;
use HTTP::Request::Common qw(POST);
use LWP::UserAgent; 

# construct cgi object
my $q = CGI->new;


# create a post request
my $useragent = LWP::UserAgent->new();  
my $request = POST '.....', [ 
     #something goes here
];
my $response = $useragent->request($request);
my $text = $response->content; 

print $text;

我对下一步该做什么有一些一般性的想法,但对细节不太确定。我将把这个perl-cgi文件上传到托管我网站的服务器,到名为cgi-bin的文件夹。我只是想知道如何从javascript调用perl-cgi文件,并将$ text的内容写回javascript varaiable。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

Javascript是一种客户端语言,而Perl是一种服务器端语言。这意味着您将无法直接将Perl变量的值读入Javascript。

可以做的是让Perl脚本输出其操作的结果。然后,您的Javascript通过AJAX调用此Perl脚本并读取结果。

这是一些伪代码来说明我的意思:

Perl脚本:csv_worker.cgi

// retrieve csv file into $text as per OP

print "Content-type: text/csv\n\n";
print $text;

<强>的Javascript

function request() {
  var xmlhttp;
  if (window.XMLHttpRequest) {
    // Supports newer browsers
    xmlhttp=new XMLHttpRequest();
  } else {
    // Supports older IE versions (IE 5/IE 6)
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState==4 && xmlhttp.status==200) {
      document.getElementById("result").innerHTML = xmlhttp.responseText;
    }
  }
  xmlhttp.open("GET","csv_worker.cgi",true);
  xmlhttp.send();
}