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();
當然,更好的辦法是使用我們在
print $AJax->build_html($CGI,\&Show_Html,\@headers);中傳遞的這個@headers,改起來也很容易的