ThinkPHP对Ajax完全支持
2013-03-28 17:27
253 查看
ThinkPHP对Ajax完全支持
ThinkPHP完全支持Ajax,并且还内置了一个SmartAjax和ThinkAjax类库,你可以不通过任何其他Ajax类库包就可以在ThinkPHP中使用Ajax支持。首先说一下ThinkPHP的JS类库以及如何在ThinkPHP中引入Js类库
JS类库
ThinkPHP框架自带了一个易于扩展的JS类库,并且通过标签库技术和JS方法轻松导入。
JS类库的引入给ThinkPHP的发展和企业级应用开启了新的一面,同时也给基于ThinkPHP的应用开发定义了一个相对简单的JS导入规范。这个规范类似于ThinkPHP基类库的命名空间导入方式,并且该规范同样可以适用于CSS文件的导入。下面先看个例子:
基于标签库技术的JS类库引入方法
<html:import type='js'file='Js.Base'/>
html:import file='Js.Util.Calendar'/>
<
使用html:import标签 可以引入所需要的JS文件,如果没有指定type,则默认为js,import的根目录可以设定,也可以通过basepath参数指定。以上的标签就表示导入 Js/Base.js、 Js/Util/Calendar.js、 ../public/Js/common.js。
这种方式的Js导入是显式的,除了以上标签库形式的导入,ThinkPHP还支持隐式的JS方法导入JS文件。
在Base.js文件中定义了_import方法,可以起到和html:import标签类似的功能,例如:
<SCRIPT LANGUAGE='JavaScript'>ImportBasePath
='http://localhost/public/';_import('Js.Form.CheckForm');//-->
</SCRIPT>
<!--
要使用_import方法在Js文件中隐式导入所需的JS类库,前提是必须加载Base.js文件和设定ImportBasePath 参数(即导入根目录),并且该方法只能导入JS文件。
除此之外,ThinkPHP提供的JS类库还提供了基于文件名方式导入JS和CSS的方法:ImportJS和ImportCss。
ThinkPHP框架目前的JS类库还比较有限,但是开发人员可以很方便的扩充自己的JS类库,并且随着ThinkPHP的不断完善,也一定会提供更加丰富的JS类库。
目前提供的类库有:
Base.js JS基础文件
String目录 字符串操作扩充类
Util目录 工具类库
Form目录 表单操作类库
SmartAjax和ThinkAjax
SmartAjax 是一个Ajax类库,纯JS解决方案,参考了CoreAjax的某些功能实现,支持HTML元素和事件绑定Ajax操作、表单提交,并可以定时执行,支持更新效果。 ThinkAjax和ThinkPHP结合,在返回数据格式上面专门针对ThinkPHP作了处理,其他用法和SmartAjax类似。
主要属性:
updateTip //更新提示信息,支持HTML method //提交方法POST 或者GET effect //更新效果,采用mootools类库,例如 {”font-size”:[0,25],”opacity”: [1,0.3]} 主要方法:
// 发送Ajax请求
send(提交URL,提交参数,结果显示DIV对象或者ID,更新显示效果,定时执行时间间隔)
// 发送表单Ajax操作
sendForm(表单对象或者ID,提交URL,结果显示DIV对象或者ID,更新显示效果)
// 绑定Ajax操作到HTML元素和事件
bind(源HTML元素或者ID,绑定事件,提交URL,提交参数,结果显示DIV对象或者ID,更新效果)
// 页面加载时候进行Ajax操作
load(提交URL,提交参数,结果显示DIV对象或者ID,更新效果)
// 定时执行Ajax操作
repeat(提交URL,提交参数,结果显示DIV对象或者ID,执行间隔,更新效果)
使用举例:
// 加载需要的类库
<script language='JavaScript' src='/Js/prototype.js'></script><script
language='JavaScript' src='/Js/mootools.js'></script>
<script language='JavaScript' src='/Js/SmartAjax.js'></script> SmartAjax.updateTip = "更新中~";
SmartAjax.effect = {'font-size':[0,30],'opacity': [1,0.3]};
// 页面加载时执行通过Ajax操作在后台执行load.php
SmartAjax.load('http://localhost/load.php',"name=thinkphp","result");
// 绑定click操作到id为run的html元素,执行Ajax
SmartAjax.bind('run','click','http://localhost/hello.php',"name=thinkphp","result");
// 每隔1秒种执行time.php,输出
SmartAjax.repeat('http://localhost/time.php',"",$('timer'),1000);
// Ajax方式提交表单数据
SmartAjax.sendForm('login', APP+'/User/checkLogin/','result',doLogin);
Ajax文件上传
ThinkPHP框架内置了对Ajax文件上传(非真正Ajax)的实现。采用的是iframe的方式对文件上传进行支持。结合ThinkPHP的文件上传类,可以很方便地进行文件上传和批量上传。下面是一个典型的文件上传示例代码:
<form id="upload"METHOD=POST
action="__APP__/Attach/insert/"enctype="multipart/form-data"target="iframeUpload">INPUT
TYPE="hidden"name="_AJAX_SUBMIT_"value="1">iframe
name="iframeUpload"src=""width="350"height="35"frameborder=0
SCROLLING="no"style="display:none"></iframe>INPUT
TYPE="hidden"name="_uploadFileResult"value="result">INPUT
TYPE="hidden"name="_uploadFileType"value="jpg,gif,png">
INPUT TYPE="hidden"name="_uploadSaveRule"value="{$user.id}">INPUT
TYPE="hidden"name="_uploadFormId"value="upload">INPUT
TYPE="hidden"name="_uploadFileSize"value="20480">
INPUT TYPE="hidden"name="_uploadResponse"value="uploadComplete">INPUT
TYPE="file"name="file">INPUT
TYPE="submit"value="上传">
form>
上传完成后,ThinkPHP系统会在iframe里面返回js代码和数据,并根据自定义的方法更新页面的result标签。更多关于文件上传方面的掌握请看 文件上传类的使用教程
后端Ajax数据返回
SmartAjax是一个独立的前端JS类库,其运行并不需要后台支持。不过,在后台处理和数据返回方面,结合ThinkPHP框架提供的一些完善处理,能够使得后台的开发效率提高。首先,在页面使用Ajax方式提交的时候使用_AJAX_SUBMIT_隐藏变量或者ajax变量,后台能够自动识别该操作为Ajax操作,并作出相应的处理。例如,表单提交Ajax方式,在form中添加<INPUT TYPE="hidden"
name="_AJAX_SUBMIT_" value="1">
如果使用SmartAjax.send方法提交操作,直接在参数里面添加ajax变量
SmartAjax.send('url','ajax=1&name=thinkphp','result);
在后台Action类处理完毕后,简单使用:
ajaxReturn($data,$info,$status) 来返回数据到客户端,其中
$data 表示需要返回客户端的数据,可以是字符串、数组或者对象(经过JSON_ENCODE编码,可以被js直接使用)
$info 表示提示信息(例如操作成功、失败等)
$status 表示操作状态码(1表示成功 0 表示失败 可以由应用自己定义,客户端作相应处理就可以了)
通常的方式我们需要使用echo或者exit来输出数据,并且还需要设置utf8编码,最麻烦的是还要自己进行json编码,使用AjaxReturn方法,一切都内置处理了。并且,另外一个方便之处是,不仅仅可以返回数据,还可以返回操作状态(例如操作失败还是成功)以及相关提示信息。 ThinkPHP对于JSON的处理已经作了兼容处理,无论是PHP4还是PHP5都可以直接使用JSON_ENCODE方法来对PHP对象、数组或者字符串等类型直接编码成JSON数据返回给客户端由JS处理。
为了更好的获取ThinkPHP后台Action的ajaxReturn方法返回的信息,框架JS类库中增加了一个ThinkAjax类库为后台ajax信息返回提供完全支持。 ThinkAjax类的使用和SmartAjax基本类似,只是简化了操作,只需要在客户端定义接受数据的处理方法,其他的由ThinkAjax类库自动处理了,包括信息提示。一个ThinkAjax的使用例子:
ThinkAjax.sendForm('formId','__URL__/action/',complete);complete(data,status,info){//
获取返回数据,并进行处理 }
相关文章推荐
- ThinkPHP对Ajax完全支持
- DotNetTextBox V2.0 Web Control(ASP.NET2.0 增强型TextBox控件,完全支持AJAX.NET)
- DotNetTextBox V2.0 Web Control(ASP.NET2.0 增强型TextBox控件,完全支持AJAX.NET)
- ThinkPHP3.1新特性之对Ajax的支持更加完善
- ThinkPHP3.1新特性之对Ajax的支持更加完善
- 王垠:写给支持和反对<完全用Linux工作>的人们
- Vsftpd完全攻略(六)建立多个虚拟用户支持ftp不同访问权限【1】
- lnmp一键安装包环境下让nginx支持thinkphp
- 在jsp页面下, 让eclipse完全支持HTML/JS/CSS智能提示
- 编码为GB2312网站让AJAX接收的数据显示支持中文
- jquery和thinkphp利用formData属性ajax上传并,添加水印,裁剪,实现预览
- jquery之利用ajax与服务器交谈(完全控制ajax请求之带着所有的修整发起Ajax请求)
- SpringMVC AJAX支持
- iOS 应用如何完全支持 IPv6-ONLY 网络?
- thinkphp ajax 进入error 返回多个红点 解决方法
- (转)AJAX支持的 GOOGLE 地图 MASHUP 教程
- 如何让浏览器支持jquery ajax load 前进、后退功能
- thinkphp ajax菜单与分页
- thinkphp扩展标签与自定义标签 及 ajaxreturn方法
- php ajax无刷新分页,支持id定位