0

あるオンライン データベースから csv ファイルを取得したいと考えています。ただし、いくつかの XSS の問題により、ajax を直接使用することはできませんが、perl-cgi ファイルを中継する必要があります。

csv ファイルを照会し、ファイルの内容を $text という perl 変数に書き込むことができる作業用の perl-cgi ファイルが既にありました。以下にいくつかのコード スニペットを示します。

#!/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 ファイルを、Web サイトをホストするサーバーの cgi-bin というフォルダーにアップロードします。どうすればその perl-cgi ファイルを javascript から呼び出して、$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 に答える