0

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

我已经有一个可以工作的 perl-cgi 文件,它可以查询 csv 文件,并将文件的内容写入一个名为 $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 变量中。

谢谢您的帮助

4

1 回答 1

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();
}
于 2013-04-15T05:08:56.203 回答