ajax|perl|問題|中文
Ajax, 最近非常紅火的技術。有很多現成的開發套件。開始的時候我試用了CPAINT,支援php/asp。還不錯。後來開始用perl的Ajax實現: CGI::Ajax。對比之下,發現非常好用。主要的特點是程式自動產生javascript調用的代碼。
這樣的話,我們可以專註於程式邏輯的開發,而不用去理睬繁複的Ajax javascript調用。這是CGI::Ajax高明的地方。
CGI::Ajax安裝
perl -MCPAN -e "install CGI::Ajax"
學習這個簡單的例子
#!/usr/bin/perl -w use strict; use CGI::Ajax; use CGI; #下面是我們這個程式的核心邏輯部分。 #用戶端通過會Ajax調用這個函數,得到想要的結果。 sub test_calculate{ my ($cal1,$cal2)=@_; return ($cal1+$cal2); } #下面是用戶端顯示的html #注意onclick部分的寫法。你可以將其理解為一段偽碼(其實不是偽碼,其實際代碼部分都是CGI::Ajax自動產生的),表示: #調用函數calculate,參數是val1控制項和val2控制項的值,結果顯示在result控制項上。 sub Show_HTML{ my $html = <<EOHTML; <HTML> <HEAD> <title>test</title> </HEAD> <BODY> <input type='text' name='val1' id='val1'> <input type='text' name='val2' id='val2'> <input type='button' name='cal' id='cal' value='cal it' ><br> <div id='result'></div> </BODY> </HTML> EOHTML return $html; } my $cgi=new CGI(); # 這裡的代碼將剛才提到的偽碼calculate和我們的perl實現函數關聯起來。 #這樣,當用戶端點擊時調用calculate偽碼,其效應就是: #程式自動產生的javascript代碼就會啟動Ajax機制,遠程調用我們這個cgi中的test_calculate函數, #並得到其結果,輸出到相應的頁面控制項來顯示。 my $ajax=new CGI::Ajax('calculate'=>\&test_calculate); #build_html,這一步中,CGI::Ajax會自動產生html網頁和Ajax調用的所有javascript代碼。 #而當用戶端通過Ajax調用本程式時,這個build_html函數還會自動調用相應的函數(test_calculate)並且返回結果。 print $ajax->build_html($cgi,\&Show_HTML);
一個小問題
在頁面的javascript中如果需要使用斷行符號字元或者其他類似字元,那麼必須要使用2個斜杠。
中文的問題
我以utf8為例。
1.頁面字元集設定
使用下面的調用方式即可。
my @headers=("charset=utf8",); print $ajax->build_html($cgi,\&Show_HTML,\@headers);
2.返回結果集中文顯示亂碼
這是CGI::Ajax的小Bug。
解決辦法如下:
找到你安裝好的Ajax.pm,找到下面這句:
my $rv = $self->cgi()->header();
把它改成類似於這樣的句子即可:
my $rv = $self->cgi()->header("charset=utf8");
當然,更好的辦法是使用我們在
print $ajax->build_html($cgi,\&Show_HTML,\@headers);中傳遞的這個@headers,改起來也很容易的。