The DoYouHaoBaby PHP Framework中文开发文档手册
Copyright(c) DoYouHaoBaby.NET All Rights Reserved.
Copyright(c) DoYouHaoBaby.NET All Rights Reserved.
[ 使用Ajax功能 ]
这里,我们将为大家讲述DoYouHaoBaby 框架提供的Ajax功能。
Ajax无刷新用户体验是现在WEB2.0必须的功能,它能够提高用户体验,让网站变得一用。
DoYouHaoBaby 框架封装了Ajax,为你提供完美的Ajax体验。
DoYouHaoBaby Ajax组件位于 DoYouHaoBaby\LibCom\Js\Dyhb\Ajax 中,只要加载了Dyhb.package.js即可使用框架提供了Ajax支持。
系统有四个基本的AJax操作方法,使用这几个方法可以完成任意格式的AJax请求。
Dyhb.Ajax.Request请求:
- /**
- * 发送一个ajax请求
- *
- * <!-- 说明 -->
- * < Function [onsuccess] 请求成功时触发,function( XMLHttpRequest oXmlHttp, string
- responseText )。
- * Function [onfailure] 请求失败时触发,function( XMLHttpRequest oXmlHttp )。
- * Function [onbeforerequest] 发送请求之前触发,function( XMLHttpRequest oXmlHttp )。
- * Function [ on{STATUS_CODE}] 当请求为相应状态码时触发的事件,如on302、on404、on500,function
- (XMLHttpRequest xhr)。3XX的状态码浏览器无法获取,4xx的,可能因为未知问题导致获取失败。>
- *
- * @param string sUrl 发送请求的url
- * @param Object arrOptions 发送请求的选项参数
- * @returns {XMLHttpRequest} 发送请求的XMLHttpRequest对象
- */
- Dyhb.Ajax.Request = function ( sUrl, arrOptions ) {
- /* Ajax请求配置 */
- /* 初始化请求参数 */
- arrOptions = arrOptions || {};
- var sData = arrOptions.data || "", /* 需要发送的数据。如果是GET请求的话,不需要这个属性 |
- string */
- bAsync = !( arrOptions.async === false ), /* 是否异步请求。默认为true(异步)| boolean
- */
- sUsername = arrOptions.username || "", /* 用户名 */
- sPassword = arrOptions.password || "", /* 密码 */
- sMethod = (arrOptions.method || "GET").toUpperCase(), /* 发送方式 :POST,GET */
- arrHeaders = arrOptions.headers || {}, /* 要设置的http request header ( HTTP 请求头 ) */
- arrEventHandlers = {}, /* 事件句柄 */
- sKey, oXmlHttp; /* 参数中的键值,XMLHttpRequest对象 */
延伸而来的Dyhb.Ajax.Post请求:
- /**
- * 发送一个post请求
- *
- * @param string sUrl 发送请求的url地址
- * @param string sData 发送的数据
- * @param Function [onsuccess] 请求成功之后的回调函数,function(XMLHttpRequest oXmlHttp, string
- responseText)
- * @meta standard
- * @returns {XMLHttpRequest} 发送请求的XMLHttpRequest对象
- */
- Dyhb.Ajax.Post = function ( sUrl, sData, onsuccess ) {
- return Dyhb.Ajax.Request(
- sUrl, {
- 'onsuccess': onsuccess,
- 'method': 'POST',
- 'data': sData
- }
- );
- };
延伸而来的Dyhb.Ajax.Get请求:
- /**
- * 发送一个get请求
- *
- * @param string sUrl 发送请求的url地址
- * @param string sData 发送的数据
- * @param Function [onsuccess] 请求成功之后的回调函数,function(XMLHttpRequest oXmlHttp, string
- responseText)
- * @returns {XMLHttpRequest} 发送请求的XMLHttpRequest对象
- */
- Dyhb.Ajax.Get = function ( sUrl,sData, onsuccess ) {
- return Dyhb.Ajax.Request( sUrl, {'onsuccess': onsuccess,'data':sData} );
- };
表单提交Ajax:
- /**
- * 将一个表单用ajax方式提交
- *
- * <!-- 说明 -->
- * < Function [replacer] 对参数值特殊处理的函数,replacer(string value, string
- key)
- * Function [onbeforerequest] 发送请求之前触发,function(XMLHttpRequest oXmlHttp)。
- * Function [onsuccess] 请求成功时触发,function(XMLHttpRequest oXmlHttp, string
- responseText)。
- * Function [onfailure] 请求失败时触发,function(XMLHttpRequest oXmlHttp)。
- * Function [on{STATUS_CODE}] 当请求为相应状态码时触发的事件,如on302、on404、on500,
- function(XMLHttpRequest oXmlHttp)。3XX的状态码浏览器无法获取,4xx的,可能因为未知问题导致获取失败。 >
- *
- * @param HTMLFormElement oForm 需要提交的表单元素
- * @param Object [arrOptions] 发送请求的选项参数
- * @returns {XMLHttpRequest} 发送请求的XMLHttpRequest对象
- */
- Dyhb.Ajax.Form = function ( oForm, arrOptions ) {
- /* 初始化配置参数 */
- arrOptions = arrOptions || {};
- var arrElements = oForm.elements,
- nLen = arrElements.length,
- sMethod = oForm.getAttribute('method'),
- sUrl = oForm.getAttribute('action'),
- replacer = arrOptions.replacer || function ( sValue, sName ) {
- return sValue;
- },
- arrSendOptions = {},
- arrData = [],
- nI, oItem, sItemType, sItemName, sItemValue,
- arrOpts, oOI, nOLen, oOItem;
具体的使用方法,大家直接访问框架中源代码参考即可。
另外,系统还封装了用于DoYouHaoBaby 框架专用的Ajax操作。
DoYouHaoBaby Framework专用Ajax位于 DoYouHaoBaby\LibCom\Js\Dyhb\Ajax\Dyhb.class.js和DoYouHaoBaby\LibCom\Js\Dyhb\Ajax\Dyhb目录,它们负责框架的Ajax请求。
主要包括表单提交和直接请求一个URL地址。
表单体验请求Dyhb.Ajax.Dyhb.AjaxSubmit:
- /**
- * 表单提交ajax
- *
- * @param string form 表单ID
- * @param string url Ajax请求url
- * @param string target 返回的消息的div id值
- * @param function response 回调函数
- * @param string sTips Ajax加载消息
- */
- Dyhb.Ajax.Dyhb.AjaxSubmit = function( sForm,sUrl,sTarget,Response,sTips ){
- /* 初始化值 */
- sUrl = (sUrl === undefined || sUrl=='' || sUrl===null) ? Dyhb.Ajax.Dyhb.Options['url']: sUrl;
- /* 请求URL */
- if (sTarget === undefined || sTarget =='' || sTarget ===null) { /* 消息DIV id */
- Dyhb.Ajax.Dyhb.TipTarget = ( Dyhb.Ajax.Dyhb.Options['target']) ?
- Dyhb.Ajax.Dyhb.Options['target'] : Dyhb.Ajax.Dyhb.TipTarget;
- }
- else{
- Dyhb.Ajax.Dyhb.TipTarget=sTarget;
- }
- /* 成功后回调函数 */
- Dyhb.Ajax.Dyhb.Response = ( Response === undefined||Response==''||Response===null ) ?
- Dyhb.Ajax.Dyhb.Response : Response;
- if ( sTips === undefined||sTips==''||sTips===null ) {
- sTips = ( Dyhb.Ajax.Dyhb.Options['tips']) ? Dyhb.Ajax.Dyhb.Options['tips']:
- Dyhb.Ajax.Dyhb.UpdateTips;
- }
直接请求一个URL 地址Dyhb.Ajax.Dyhb.AjaxSend:
- /**
- * 表单提交ajax
- *
- * @param string url Ajax请求url
- * @param string target 返回的消息的div id值
- * @param function response 回调函数
- * @param string sTips Ajax加载消息
- * @param string sType Ajax发送类型[get/post,默认为get]
- */
- Dyhb.Ajax.Dyhb.AjaxSend = function( sUrl,Params,sTarget,Response,sTips,sType ){
- /* 初始化值 */
- sUrl = (sUrl === undefined || sUrl==''||sUrl===null) ? Dyhb.Ajax.Dyhb.Options['url']: sUrl; /*
- 请求URL */
- if (sTarget === undefined || sTarget =='' || sTarget ===null) { /* 消息DIV id */
- Dyhb.Ajax.Dyhb.TipTarget = ( Dyhb.Ajax.Dyhb.Options['target']) ?
- Dyhb.Ajax.Dyhb.Options['target'] : Dyhb.Ajax.Dyhb.TipTarget;
- }
- else{
- Dyhb.Ajax.Dyhb.TipTarget=sTarget;
- }
- /* 成功后回调函数 */
- Dyhb.Ajax.Dyhb.Response = ( Response === undefined||Response==''||Response===null ) ?
- Dyhb.Ajax.Dyhb.Response : Response;
- if ( sTips === undefined||sTips==''||sTips===null ) {
- sTips = ( Dyhb.Ajax.Dyhb.Options['tips']) ? Dyhb.Ajax.Dyhb.Options['tips']:
- Dyhb.Ajax.Dyhb.UpdateTips;
- }
有了这两个方法,我们可以轻松地进行Ajax操作。
说明:除了这两个方法外,还有一些辅助方法供大家参考。
我们在开发 DYHB.BLOG_X 1.0版本中使用实例,代码位于admin项目中。
我们首先初始化Ajax消息提示图片,位于DYHB.BLOG_X\Upload\admin\Tpl\Default\public_header.html。
- Dyhb.Ajax.Dyhb.Image = ['__TMPLPUB__/Images/ajax/loading.gif','__TMPLPUB__/Images/ajax/ok.gif','__TMPLPUB__/Images/ajax/update.gif' ];
具体的操作方法,位于DYHB.BLOG_X\Upload\admin\Tpl\Default\node_add.html中:
- {script}
- <!--
- function add(){
- if( $('#id').val()!='' && $('#id').val()!==null ){
- update();
- return;
- }
- $("#submit_button").attr("disabled", "disabled");
- $("#submit_button").val( D.L('添加节点中') );
- Dyhb.AjaxSubmit('nodeAdd','{:G::U('node/insert')}','',complete);
- }
- function update(){
- $("#submit_button").attr("disabled", "disabled");
- $("#submit_button").val( D.L('更新节点中') );
- Dyhb.AjaxSubmit('nodeAdd','{:G::U('node/update')}','',function(){ $("#submit_button").attr
- ("disabled", false);$("#submit_button").val( D.L('更新节点') ); });
- }
- function complete(data,status){
- $("#submit_button").attr("disabled", false);
- $("#submit_button").val( D.L('添加节点') );
- if(status==1){
- $('#id').val(data.node_id);
- }
- }
- -->
- {/script}
说明:complete有三个参数function complete(data,status,info)为返回的数据,状态和反馈消息。
data为一个json数组,status的值为0,1(1代表正确,0表示错误),info为一个字符串消息。
提供给Ajax显示 显示效果的DIV 块:
- <div id="DyhbAjaxResult" class="none DyhbAjaxResult"> </div>
修饰Ajax的CSS代码:
- .DyhbAjaxResult{border:2px ridge #000; background-color:#eee;line-height:20px;position:fixed;top:20px;rightright:20px;padding:10px 20px;}
为了确保是AJax访问,你可以在提交表单中隐藏传入一个为ajax的表单值,ajax表单值可以通过系统配置来修改,改
配置为AJAX_SUBMIT_VAR_NAME,你可以在项目配置中修改。
- <input type="hidden" name="ajax" value="1">
使用Dyhb.AjaxSend来发送ajax,可以添加一个ajax=1来确保返回的是AjAX 技术。
- function checkUsername(){
- $("#check_button").attr("disabled", "disabled");
- $("#check_button").val( D.L('帐号检查中') );
- Dyhb.AjaxSend('{:G::U('user/checkusername')}','ajax=1&user_name='+$('#user_name').val
- (),'',function(data,status){ $("#check_button").attr("disabled", false);$("#check_button").val(D.L("检
- 测账户")); });
- }
在框架的PHP 中使用Ajax.
- $arrVo = array(
- 'id' => $sInputAjaxField.'_'.$nInputAjaxId,
- 'value' => $sInputAjaxVal,
- );
- $this->A( $arrVo, G::L( '数据更新成功!') );
我们在框架中complete有三个参数function complete(data,status,info)可以得到。
data.id返回id值,value返回value值,status=1,info为"数据更新成功!".
如果,你不需要返回数据,你也可以使用:
- $this->S( G::L( '数据更新成功!') );
这样简单吧,哈哈,寻求更多支持,请访问官方论坛!
To be continue!
