What is xajax? How does xajax work? Why should I use xajax instead of another Ajax library for PHP? How do I use xajax in my PHP script? How do I update my content asynchronously? How do I process form data asynchronously? How do I add custom functionality to xajax? May I use xajax in a proprietary product and charge for it? 什么是xajax? Xajax是一个开源的 PHP 类库 它能够让你黏合HTML、CSS、JavaScript和PHP,轻而易举的开发功能强大、基于WEB的AJAX应用软件. 使用xajax开发的应用软件,无需重新调入页面,就能够异步调用服务器端的PHP函数和更新内容. What is xajax? xajax is an open source PHP class library that allows you to easily create powerful, web-based, Ajax applications using HTML, CSS, JavaScript, and PHP. Applications developed with xajax can asynchronously call server-side PHP functions and update content without reloading the page.
xajax 如何工作? 你的应用软件需要异步调用的PHP函数, xajax的PHP对象都生成了对应的封装好了的JavaScript函数. 当被调用时,封装的函数使用JavaScript的XMLHttpRequest对象与服务器异步通讯,调用xajax对象对应的PHP函数. 调用结束后, PHP函数由xajax返回一个xajax的XML响应传递给应用程序. XML响应包含了特定的指令和数据,他们可以被xajax的JavaScript消息分析器解析,并且被用于更新你的应用程序的内容. How does xajax work? The xajax PHP object generates JavaScript wrapper functions for the PHP functions you want to be able to call asynchronously from your application. When called, these wrapper functions use JavaScript's XMLHttpRequest object to asynchronously communicate with the xajax object on the server which calls the corresponding PHP functions. Upon completion, an xajax XML response is returned from the PHP functions, which xajax passes back to the application. The XML response contains instructions and data that are parsed by xajax's JavaScript message pump and used to update the content of your application. 为什么我要使用xajax代替其他PHP的ajax库? 你应该选择一个最是和你的项目需要的库. xajax 提供了以下的功能, 它们使得ajax富有特色而又功能强大: Why should I use xajax instead of another Ajax library for PHP? You should choose whatever library will best meet the needs of your project. xajax offers the following features that, together, make it unique and powerful: Xajax特殊的 XML 响应 / javascript 消息分析系统 帮助你做到, 自动的处理函数返回的数据,按照PHP函数返回的指令更新内容或者状态. 因为xajax作了这些工作Because xajax does the work, 你不需要写javascript的回调处理函数. xajax's unique XML response / javascript message-pump system does the work for you, automatically handling the data returned from your functions and updating your content or state according to the instructions you return from your PHP functions. Because xajax does the work, you don't have to write javascript callback handler functions. Xajax反对将代码和数据紧密地杂糅在一起的主张, 并且保持xajax的代码从与他代码分离. 因为它是对象构造的, 你可以加上自己定制的功能给xajax去扩展xajaxResponse 类和使用addScript方法. xajax is object oriented to maintain tighter relationships between the code and data, and to keep the xajax code separate from other code. Because it is object oriented, you can add your own custom functionality to xajax by extending the xajaxResponse class and using the addScript() method. xajax 可以工作在 Firefox, Mozilla, 大部分基于 Mozilla 的浏览器, Internet Explorer, 和 Safari. xajax works in Firefox, Mozilla, probably other Mozilla based browsers, Internet Explorer, and Safari. 除了更新元素的值和内含的HTML内容(innerHTML), xajax 还能用于更新样式(styles), css 类, 多选和单选按钮选择,甚至可以更新任何元素的属性. In addition to updating element values and innerHTML, xajax can be used to update styles, css classes, checkbox and radio button selection, or nearly any other element attribute. xajax 支持使用一维或者多维数组、关联数组(哈希数组) 作为xajax函数的参数从javascript传送给PHP. 反之Additionally, 如果你传送一个javascript的对象给xajax函数,PHP函数将接受一个描叙对象属性的关联数组(哈希数组). xajax supports passing single and multidimensional arrays and associative arrays from javascript to PHP as parameters to your xajax functions. Additionally, if you pass a javascript object into an xajax function, the PHP function will receive an associative array representing the properties of the object. xajax 提供了一种简单的异步表单处理方式. 使用 xajax.getFormValues() javascript 方法, 你可以轻而易举的在表单之中提交一个描绘值的数组作为参数传送到xajax异步处理函数: xajax_processForm(xajax.getFormValues('formId'); . 它可以处理复杂的input 元素名称 ,例如 "checkbox[][]" 或者 "name[first]" 产生的多维或者关联数组(哈希数组), 就是普通提交表单那样使用PHP的$_GET数组 xajax provides easy asynchronous Form processing. By using the xajax.getFormValues() javascript method, you can easily submit an array representing the values in a form as a parameter to a xajax asynchronous function: xajax_processForm(xajax.getFormValues('formId'); . It even works with complex input names like "checkbox[][]" and "name[first]" to produce multidimensional and associative arrays, just as if you had submitted the form and used the PHP $_GET array 使用xajax你可以动态的发送附加的javascript作为请求的响应到你的应用软件中运行,而这就和动态的更新元素的属性一样方便. Using xajax you can dynamically send additional javascript to your application to be run in response to a request as well as dynamically update element attributes. Xajax会自动比较PHP函数返回的数据与你已经标记需要修改的元素属性. 只有当新的数据确实可以改变现有的属性,属性才会真的被更新. 这将可消除程序在一定时间间隔内更新与当前内容相同或者不同的内容而出现的明显的闪烁. xajax automatically compares the data returned from the PHP functions to the data that is already in the attribute of the element you have marked for change. The attribute is only updated with the new data if it will actually change what is already in the attribute. This eliminates the flicker often observed in applications that update content at a regular time interval with data which may or may not differ from extant content. 每一个通过xajax简单注册的函数都可以有不同的请求方式. 所有的函数默认使用POST方式,除非你明确的指定使用GET方式. 如果使用GET请求,你必须非常明确的考虑它确实是你所需要的 Each function registered to be accessible through xajax can have a different request type. All functions default to use POST unless GET is explicitly set. This is to encourage careful consideration of when to use GET requests 如果没有指定URI,xajax将设法自动确定脚本的URI. Xajax的自动确定算法经过了充分的验证,确保在大部分HTTPS或者未知端口的HTTP服务器上也可以正常的工作. If no request URI is specified, xajax tries to autodetect the URL of the script. The xajax autodetection algorithm is sophisticated enough that, on most servers, it will work under a secure https:// protocol as well as http:// and with nonstandard ports. Xajax使用UTF8编码所有的请求和响应,以确保支持绝大部分的字符和语言. Xajax已经成功测试了多种不同的UNICODE字符,包括Spanish, Russian, Arabic, and Hebrew xajax encodes all of its requests and responses in UTF-8 so that it can support a wider range of characters and languages. xajax has been successfully tested with various unicode characters including Spanish, Russian, Arabic, and Hebrew 几乎所有xajax生成的javascript都可以通过动态的外部javascript包含到你的web程序之中. 当你在浏览器之中查看程序的源代码时,不会有JavaScript的函数定义混杂在HTML标记之中. Nearly all of the javascript generated by xajax is included into your web application through dynamic external javascript. When you view the source of your application in your browser, the markup will be not cluttered by JavaScript function definitions. Xajax可以使用在Smarty模板系统之中,仅仅需要创建一个smarty变量就可以包含xajax的javascript: $smarty->assign('xajax_javascript', $xajax->getJavascript()); 然后你可以使用在header模版之中使用 {$xajax_javascript} 从而把xajax应用到你的站点. xajax can be used with the Smarty templating system by creating a variable in smarty that contains the xajax javascript: $smarty->assign('xajax_javascript', $xajax->getJavascript()); Then you can use {$xajax_javascript} in your header template to use xajax on your site. 如何在我的PHP脚本之中使用xajax? Xajax的设计是如此的富有特色,以至于不管是已有的web程序还是新的项目,它都能够被极其简单的部署和应用. 仅仅需要七步,你就可以在几乎任何PHP脚本之中加入xajax的强大功能: How do I use xajax in my PHP script? xajax is designed to be extremely easy to implement in both existing web applications as well as new projects. You can add the power of xajax to nearly any PHP script in seven easy steps: 包含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();
// Instantiate the xajaxResponse object $objResponse = new xajaxResponse();
// add a command to the response to assign the innerHTML attribute of // the element with id="SomeElementId" to whatever the new content is $objResponse->addAssign("SomeElementId","innerHTML", $newContent);
//return the XML response generated by the xajaxResponse object return $objResponse->getXML(); } Before your script sends any output, have xajax handle any requests: $xajax->processRequests(); Between your tags, tell xajax to generate the necessary JavaScript: printJavascript(); ?> Call the function from a JavaScript event or function in your application: