2014-02-26 75 views
2

我想從javascript調用perl腳本。我曾經嘗試這樣做使用AJAX:使用AJAX從JavaScript調用Perl腳本

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 
    } 
    } 
} 

create_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腳本只創建一個文本文件。

調用perl腳本的JavaScript後,返回結果的打印是create_file.pl的全部內容,而不是創建file.txt的它的文件。

+2

完全忽略AJAX,如果在Web瀏覽器中調用perl腳本,會發生什麼情況? –

回答

2

這有什麼做與AJAX

如果你正在你的Perl文件從你的AJAX調用返回的內容,這是什麼意思是,你的Web服務器配置無法處理的Perl(JavaScript是正確訪問位置,或者你會得到一個404)。

至於如何做到這一點,不知道你的服務器很難說。通常你需要建立一個規則來傳遞請求到.pl文件到你的CGI處理程序。

在lighttpd的(我用的),這就是:

$HTTP["url"] =~ "/cgi-bin/" { 
     cgi.assign = (".pl" => "/usr/bin/perl") 
} 

如果你不使用的lighttpd,我建議採取谷歌的your-server cgi,並按照指示將其配置爲通過解析這些文件perl的。

2

調用perl腳本的JavaScript後,返回結果的打印是create_file.pl的全部內容,而不是創建file.txt的它的文件。

然後:

  • 你,而不是通過一個web服務器工作在本地文件系統上
  • 您還沒有配置您的服務器來處理Perl程序作爲CGI代替靜態文件。
1

當您收到一個Perl腳本的背課文從您的Web服務器,以及您所期望的Web服務器執行腳本,那麼你有什麼是錯誤配置的Web服務器。

您需要配置您的Web服務器,以便它知道執行文件。

通常會將一個人的可執行文件與靜態內容分開。然後配置Web服務器以允許執行可執行文件目錄中的程序。該配置的確切語法將取決於您正在運行的Web服務器。