xajax

Xajax是一個開源的 PHP 類庫 它能夠讓你黏合HTML、CSS、JavaScript和PHP,輕而易舉的開發功能強大、基於WEB的AJAX套用軟體。

基本介紹

  • 中文名:xajax
  • 英文原版:J. Max Wilson
  • 簡體中文翻譯:HonestQiao
  • 最新版:v0.5 final
簡介,什麼是xajax,xajax如何工作,為什麼我要使用xajax代替其他PHP的Ajax庫,如何在我的PHP腳本之中使用xajax,補充,怎么實現邏輯和表現分離,如何實現更炫的效果,使用了XAJAX以後滑鼠箭頭頻繁閃動怎么辦,

簡介

封裝的很好的php類,可以很方便實現ajax的功能。
優點,簡單,對js要求不是很高,會寫php的函式就能用。
英文原版:Copyright © 2005 J. Max Wilson
簡體中文翻譯:HonestQiao(喬楚)/2005-12-7 17:23/(第一版)
最新版:v0.5 final

什麼是xajax

Xajax是一個開源的 PHP 類庫 它能夠讓你黏合HTML、CSS、JavaScript和PHP,輕而易舉的開發功能強大、基於WEB的AJAX套用軟體. 使用xajax開發的套用軟體,無需重新調入頁面,就能夠異步調用伺服器端的PHP函式和更新內容。

xajax如何工作

你的套用軟體需要異步調用的PHP函式, xajax的PHP對象都生成了對應的封裝好了的JavaScript函式. 當被調用時,封裝的函式使用JavaScript的XMLHttpRequest對象與伺服器異步通訊,調用xajax對象對應的PHP函式. 調用結束後, PHP函式由xajax返回一個xajax的XML回響傳遞給應用程式. XML回響包含了特定的指令和數據,他們可以被xajax的JavaScript訊息分析器解析,並且被用於更新你的應用程式的內容.

為什麼我要使用xajax代替其他PHP的Ajax庫

你應該選擇一個最適合你的項目需要的庫.
xajax 提供了以下的功能, 它們使得ajax富有特色而又功能強大:
Xajax特殊的 XML 回響 / javascript 訊息分析系統 幫助你做到, 自動的處理函式返回的數據,按照PHP函式返回的指令更新內容或者狀態. 因為xajax作了這些工作Because xajax does the work, 你不需要寫javascript的回調處理函式.
Xajax反對將代碼和數據緊密地雜糅在一起的主張, 並且保持xajax的代碼從與他代碼分離. 因為它是對象構造的, 你可以加上自己定製的功能給xajax去擴展xajaxResponse 類和使用addScript方法.
xajax 可以工作在 Firefox, Mozilla, 大部分基於 Mozilla 的瀏覽器, Internet Explorer, 和 Safari.
除了更新元素的值和內含的HTML內容(innerHTML), xajax 還能用於更新樣式(styles), css 類, 多選和單選按鈕選擇,甚至可以更新任何元素的屬性.
xajax 支持使用一維或者多維數組關聯數組(哈希數組) 作為xajax函式的參數從javascript傳送給PHP. 反之Additionally, 如果你傳送一個javascript的對象給xajax函式,PHP函式將接受一個描敘對象屬性的關聯數組(哈希數組).
xajax 提供了一種簡單的異步表單處理方式. 使用 xajax.getFormValues() javascript 方法, 你可以輕而易舉的在表單之中提交一個描繪值的數組作為參數傳送到xajax異步處理函式:
xajax_processForm(xajax.getFormValues('formId');
它可以處理複雜的input 元素名稱 ,例如 "checkbox[][]" 或者 "name[first]" 產生的多維或者關聯數組(哈希數組), 就是普通提交表單那樣使用PHP的$_GET數組
使用xajax你可以動態的傳送附加的javascript作為請求的回響到你的套用軟體中運行,而這就和動態的更新元素的屬性一樣方便.
Xajax會自動比較PHP函式返回的數據與你已經標記需要修改的元素屬性. 只有當新的數據確實可以改變現有的屬性,屬性才會真的被更新. 這將可消除程式在一定時間間隔內更新與當前內容相同或者不同的內容而出現的明顯的閃爍.
每一個通過xajax簡單註冊的函式都可以有不同的請求方式. 所有的函式默認使用POST方式,除非你明確的指定使用GET方式. 如果使用GET請求,你必須非常明確的考慮它確實是你所需要的
如果沒有指定URI,xajax將設法自動確定腳本的URI. Xajax的自動確定算法經過了充分的驗證,確保在大部分HTTPS或者未知連線埠的HTTP伺服器上也可以正常的工作.
Xajax使用UTF8編碼所有的請求和回響,以確保支持絕大部分的字元和語言. Xajax已經成功測試了多種不同的UNICODE字元,包括Spanish, Russian, Arabic, and Hebrew
幾乎所有xajax生成的javascript都可以通過動態的外部javascript包含到你的web程式之中. 當你在瀏覽器之中查看程式的原始碼時,不會有JavaScript的函式定義混雜在HTML標記之中.
Xajax可以使用在Smarty模板系統之中,僅僅需要創建一個smarty變數就可以包含xajax的javascript:
$smarty->assign('xajax_javascript', $xajax->getJavascript());
然後你可以使用在header模版之中使用
{$xajax_javascript}
從而把xajax套用到你的站點.

如何在我的PHP腳本之中使用xajax

Xajax的設計是如此的富有特色,以至於不管是已有的web程式還是新的項目,它都能夠被極其簡單的部署和套用. 僅僅需要七步,你就可以在幾乎任何PHP腳本之中加入xajax的強大功能:
包含xajax類庫: require_once("xajax.inc.php");
實例化xajax 對象: $xajax = new xajax();
註冊你需要通過xajax調用的PHP函式的名稱: $xajax->registerFunction("myFunction");
編寫註冊的PHP函式,並且在函式之中使用xajaxResponse 對象返回XML指令:
function myFunction($arg){// 對$arg做一些基本處理例如從資料庫檢索數據// 然後把結果賦值給變數,例如$newContent// 實例化xajaxResponse 對象$objResponse = new xajaxResponse();// 添加指令到回響之中,用於指派//指定元素(例如id="SomeElementId")的innerHTML屬性的新的內容$objResponse->addAssign("SomeElementId","innerHTML", $newContent);//返回xajaxResponse 對象生成的XML回響return $objResponse->getXML();}
在你的腳本輸出任何信息之前,調用xajax用於接管請求:
$xajax->processRequests();
在頁面的 <head></head> 標籤之間, 告訴xajax生成所必需的JavaScript:
<?php $xajax->printJavascript(); ?>
在程式中,從JavaScript事件或者函式調用前面註冊的函式:
當然,如果你用的是smarty模板的話,則你需要在PHP中用下面的方法
$smarty->assign('xajax_js',$xajax->getJavascript());
然後在模板中用{$xajax_js}調用
<button onclick="xajax_myFunction(SomeArgument);">
就這么簡單. xajax 會處理其他所有的事情. 你所要做的主要工作就是編寫PHP函式,然後從函式之中返回xajax的XML回響。而後者通過xajaxResponse類可以非常簡單的生成.

補充

一、ajax+smarty範例和xajax的一些問題
網上關於XAJAX的教程很少,出現最多的就是那個七步使用XAJAX的文檔。不過那個東西沒有提到一下東西,我就簡單說一下。都是自己摸索的,有不對的地方還請指教。
一切說明都以0.25版本為基礎,0.5BETA的用戶請順藤摸瓜照葫蘆畫瓢照貓畫虎舉一反三……

怎么實現邏輯和表現分離

(HTML代碼和程式代碼分離)
要做到這個我們必然需要一個模板引擎了(當然也可以寫一個超級簡單的,不過再簡單也叫模板引擎吧……)
比較火的是SMARTY吧?咱們就用SMARTY+XAJAX開說。
比如我們要製作一個用戶信息頁面,簡單的左右兩邊的頁面。左邊是導航,右邊是具體的內容。
HTML我簡單寫一個:
<html> <head></head> <body>   <div id="main">      <div id="left">     <li><a href="#" mce_href="#" onclick="xajax_showDetail();"></a></li>    <a href="#" mce_href="#" onclick="xajax_showDetail();"> </a>    <li><a></a><a href="#" mce_href="#" onclick="xajax_showUserinfo();"></a></li>    <a href="#" mce_href="#" onclick="xajax_showUserinfo();"> </a>   </div>   <a href="#" mce_href="#" onclick="xajax_showUserinfo();">     <div id="right">     </div> </a>  </div> </body></html>
分別表示左右兩個部分。左邊有兩個連結,點擊後右邊通過AJAX取得數據並且重新填充。
我們構建兩個模板頁面,對應上面連結。
detai.htm:
<div> {|$detail|}<!--這個$detail是smarty要替換的內容--> </div>
userinfo.htm:
<div> {|$userinfo|}<!--這個$userinfo是smarty要替換的內容--> </div>
好了準備工作結束
開始xajax server的編寫
server.php:
<?php $xajax = new xajax(); $smarty = new smarty(); function Detail() { $objResponse = new xajaxResponse(); $detail = "測試XAJAX"; /*********這裡是重點部分***************/ $smarty -> assign('detail',$detail);//替換模板的數據 $content = $smarty -> fetch('detail.htm');//這裡是最重要的一步,smarty把動態數據替換模板,並且返回已經替換過後的模板HTML數據 /****接著我們用替換過的數據通過AJAX填充頁面*****/ $objResponse -> addAssign('right','innerHTML',$content); retuen $objResponse ; } $xajax -> registerFunction('detail');//註冊函式 $xajax -> processRequests();//接管請求 ?>
server.php編寫結束,當然無視了userinfo這個東西,因為東西是一樣的。
到此為止,我們實現了XAJAX和SMARTY結合實現AJAX效果的目的。

如何實現更炫的效果

見過很多使用AJAX技術的網站在讀取數據的時候都會出現一個進度條寫著讀取中吧?感覺很COOL是吧,XAJAX照樣也能做!
其實很簡單,在要出現進度條的頁面上首先放上如下代碼:
<!--loding-->  <div id="loadingContainer">   <div id="loading">    頁面載入中,請稍候    <br />    <img src="src/images/common/loader.gif" mce_src="src/images/common/loader.gif" />   </div>  </div>   <!--loding end-->
這樣就做出了來了一個顯示等待條的方塊。
接著在頁面裡面寫上如下JS代碼:
<script languege="javascript/text"> loadingpic = document.getElementById('loadingContainer'); loadingpic.style.display = 'none';// 初始化進度條為不可見 /*****這兩句話比較重要*****/ xajax.loadingFunction = loading; // 定義XAJAX在等待請求時候調用的函式 xajax.doneLoadingFunction = loadingDone; //定義XAJAX在或得請求數據以後調用的函式 function loading() { loadingpic.style.display = 'block'; //設定請求數據的時候可見 } function loadingDone() { loadingpic.style.display = 'none'; //設定請求結束以後消失 } </script>
就這么簡單的幾句,狀態條功能就實現了。
注意,如果從請求到獲得數據的時間小於400毫秒的話,XAJAX默認不調用定義的函式,這主要是為了保證良好的效果。畢竟條一閃即逝沒什麼意思,還不如不顯示。如果非得想要讓用戶看見,可以在PHP裡面SLEEP(1) 一下,嘿嘿。

使用了XAJAX以後滑鼠箭頭頻繁閃動怎么辦

這個問題一般出現需要頻繁和後台溝通的情況下。比如我們定義每0.5秒請求一次伺服器。這時候你會發現一個問題,就是滑鼠箭頭每隔0.5秒都會變成等待中(帶個沙漏)的樣子一下,閃的人心煩,並且讓人產生頁面一直都在刷新的可恥想法。
要解決這個問題非常的簡單其實……
只要在實體化XAJAX以後加上一句話就可以了:
$xajax->waitCursorOff();
這樣就可以避免滑鼠閃動了。
我試了試這個方法,好像不管用,在xajax.inc.php里也沒這個方法,不過有CursorOff這個變數,把他改為FALSE就行了
二、Xajax 0.5 使用多個不同請求
怎么把客戶端和要請求的php方法分離到兩個頁面呢,請看下去
1)新建一個全局的xajax包含檔案
<?php// Requiring the xajax core filerequire_once "xajax/xajax_core/xajax.inc.php";// Defining the xajax object$xajax = new xajax();?>
2)新建一個帶標準xajax調用的通用php檔案
<?php// Common file// Registering our function, remember that the URI must be a string: "handler.php"$xajax->register(XAJAX_FUNCTION, 'myFunctionA', array('URI' => "\"handler.php\""));?>
3)新建一個處理檔案
<?php// Handler// Require the ajax global filerequire_once "xajax_include.php";// Require the common file for this handlerrequire_once "common.php";// Our functionfunction myFunctionA($givenParameters) {// new xajaxResponse Object$objResponse = new xajaxResponse();// Processreturn $objResponse;}// Let xajax process our request$xajax->processRequest();?>
4)新建一個主檔案
<?php// Require the xajax global filerequire_once "xajax_include.php";// Require the Common file for this pagerequire_once "common.php";?><!DOCTYPE ... /><html><head><?php $xajax->printJavascript(); ?>...</head>etc ...
5)調用函式代碼:
<a href='#' onclick='xajax_myFunctionA(); return false;'>
6)依上述步驟來寫多種檔案,分別包含各自的通用檔案和處理檔案。但是要注意包含所有通用檔案,這樣才能註冊和使用所有處理函式。

相關詞條

熱門詞條

聯絡我們