2010-04-06 37 views
0

我有一個客戶端應用程序,它通過AJAX POST請求(request.open("POST", url, flag))將一些數據提交給我的Perl CGI腳本。如何接收和響應Perl中的Ajax請求?

如何用Perl檢索這些數據並返回其他數據(AJAX響應)?

回答

4

與處理任何POST請求的方式相同。您需要一個位於url的CGI腳本,它接收POST並返回JavaScript所期望的任何內容。與普通HTML表單POST唯一的區別是您將接收和傳輸的Content-Type。

+0

我知道它是如何工作的,但我對Perl不是很熟悉,所以我問。 「用同樣的方式處理任何POST請求」 - 我不知道如何使用Perl處理POST請求,這是我的問題。 – Peterim 2010-04-06 20:01:52

+1

@Peterim,那麼你應該提供更多關於你想要完成的細節。有很多方法可以做到這一點,並且很難知道在不知道更多關於您的情況的情況下推薦哪些方法。 – cjm 2010-04-06 21:32:21

2

使用核心CGI模塊。例如。

use strict; 
use warnings; 

use CGI; 

my $q = CGI->new; 
my $foo = $q->param('foo'); 

print $q->header; 
print "You said $foo"; 

如果您的應用程序將是龐大而複雜,您可能需要調查Perl的Web應用程序框架之一,像CGI::ApplicationCatalyst

+0

這只是一個不好的建議。不能保證來自XMLHttpRequest的數據被格式化爲HTML表單的輸出。 – 2010-04-06 21:37:10

+3

的確,沒有保證,但所有Ajax庫默認都使用表單編碼,除非您編寫自己的發佈數據字符串。鑑於OP沒有任何相反的說法,因此假定默認行爲是合理的。 – friedo 2010-04-06 22:02:23

+0

好的,但你的回答沒有任何關於它可能或不可行的警告。 – 2010-04-07 01:04:33

0

CGI腳本的基本模型是「從STDIN中讀取,寫入STDOUT」。在輸入階段,環境變量CONTENT_LENGTH給出從STDIN讀取什麼的字節長度。在輸出級,你還需要發送基本的HTTP標頭,這是最小的一條線「的Content-Type」與MIME類型,像text/html,或text/plain等加一個空行:

Content-Type: text/plain 

<your data starts here> 

在在XMLHttpRequest的情況下,您完全控制了數據的格式,因此如何解析STDIN的輸入取決於您。同樣,你可以躺在mime類型中,併發送你想要的任何響應。

JSON是一種很好的將數據從Perl發送到JavaScript的格式。

-1
use CGI; 
my $q = CGI->new; 
my $xml = $q->param('POSTDATA');