2013-04-15 107 views
0

我想從一個在線數據庫中檢索一個csv文件。但是,由於一些XSS問題,我無法直接使用ajax,但需要在perl-cgi文件上進行中繼。perl cgi與javascript的會談

我已經有一個可以查詢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變量。

感謝您的幫助

回答

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(); 
} 
+0

嗨賈裏德伍,我只是想,在至少我這次打印了一些東西,但爲什麼不顯示csv文件,它顯示了...... perl fi的內容樂。我錯過了什麼嗎? –

+0

@Josh這聽起來像你的Web服務器沒有配置爲將Perl文件解釋爲可執行腳本。你確定你的Perl文件在你的web服務器的配置「cgi-bin」目錄下嗎?如果您使用Apache,請檢查您的httpd.conf –

+0

@ Jared,我使用命令行(來自SSH安全shell)來執行perl-cgi文件,它會打印出csv文件的值。我有一個疑問:我應該將cgi-bin文件夾放在public_htm中,還是放在相同的目錄下?謝謝 –