ThinkPHP+JQuery实现ajax无刷新登录验证(详解+相关问题)
来源:互联网 发布:python 打印字体颜色 编辑:程序博客网 时间:2024/05/17 08:51
ThinkPHP+JQuery实现ajax无刷新登录验证
摘要:
使用原生javascript进行ajax实现无刷新更改页面内容的复杂性尽人皆知,而jquery对ajax传递进行了封装和优化,因此通过jquery进行ajax的参数传递无疑是很好的选择。本文主要内容为thinkphp结合jquery实现登录验证的无刷新,并可以应用到其他方面。
目录:
- jquery实现ajax参数传递的三种方式。
- thinkphp中ajaxReturn的取舍问题
- 通过外部js映入ajax验证并实现验证功能
- 基本验证原理
- 相关问题阐述
- ajax返回内容的选择
- jquery ready()函数探究
- 无刷新后ajax失效问题
- thinkphp路径问题
一、jquery传递ajax参数的三种方式
第一种:load()
$(selector).load(URL,data,callback);
load() 方法从服务器加载数据,并把返回的数据放入被选元素中。参数说明:
- URL:必选参数,用于服务器地址
- data:可选,用于发送数据
- callback:函数,用于数据返回处理
第二种:$.get()
$.get(URL,callback);
$.get()方法只用于取数据,不用于传输参数。
参数说明:
- URL:必选参数,用于服务器地址
- callback:函数,用于数据返回处理
第三种:$.post()
$.post(URL,data,callback);
参数说明:
- URL:必选参数,用于服务器地址
- data:可选,用于发送数据
- callback:函数,用于数据返回处理
如果是取简单的页面,则使用get load都可以,由于需要进行登录验证等操作,所以最好选用post方法。
$this->ajaxReturn(data,info);
- 我们都知道,ajax返回数据的页面不能有输出,否则会将输出一起返回,或者将静态页面返回,因此返回数据的正确决定了应用能正确运行。
- 第一次使用ajax的时候,就是返回一堆静态页面,包括从数据库返回的崩溃信息,因此颇为头疼。
- ThinkPHP对ajax进行了数据的封装优化,创造了ajaxReturn函数,在返回数据的确保数据的正确性,但是经过测试发现,当从数据库返回信息崩溃之后,返回的信息依旧是崩溃的错误页面的信息,这一点抓包就能看到。
那么问题来了:是否使用ajaxReturn呢?
个人建议:使用ajaxReturn来返回数据。
- 使用ajaxReturn可以返回四种格式数据,分别是json,jsonp,xml,eval
- 使用ajaxRetuen在返回数据中可以进行data[]封装
代码说明:
- index.html (页面)
- indexAjax.js (ajax调用)
- IndexController.class.php (逻辑)
index.html:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>AjaxTest</title> <script> var appUrl="__APP__"; /* 通过定义APP,获取APP地址在JS中使用! 常量的定义必须在indexAjax.js前面,不然失效! */ </script> <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.js"></script> <script src="__PUBLIC__/indexAjax.js"></script> </head> <body> <form > <label for="name">Name:</label> <input type="text" name="name" value="" id="name"> <label for="password">Password:</label> <input type="password" name="password" value="" id="password"> <input type="button" id="submitButton" value="登录"> </form> <hr> <h1 id="loginSuccess">Login Success!!</h1> <h1 id="loginError">Login Error!!</h1> <!--初始隐藏--> </body> </html> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>AjaxTest</title> <script> var appUrl="__APP__"; /* 通过定义APP,获取APP地址在JS中使用! 常量的定义必须在indexAjax.js前面,不然失效! */ </script> <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.js"></script> <script src="__PUBLIC__/indexAjax.js"></script> </head> <body> <form > <label for="name">Name:</label> <input type="text" name="name" value="" id="name"> <label for="password">Password:</label> <input type="password" name="password" value="" id="password"> <input type="button" id="submitButton" value="登录"> </form> <hr> <h1 id="loginSuccess">Login Success!!</h1> <h1 id="loginError">Login Error!!</h1> <!--初始隐藏--> </body> </html>
indexAjax.js
jQuery(document).ready(function() { $('#loginSuccess').hide(); $('#loginError').hide(); var postUrl=appUrl+"/Home/Index/test"; //通过前面定义的变量获取地址 $('#submitButton').click(function(){ // $.post('d1',{json:数据},{回调函数}); //post可以传递json数据,如下: $.post(postUrl,{ 'name':$("#name").val(), 'password':$("#password").val() },function(data){ /*data是返回的值*/ if(data.flag==1){ //返回的是json数据,详细看php代码 $('#loginSuccess').fadeIn(); $('#loginError').fadeOut(); }else{ $('#loginError').fadeIn(); $('#loginSuccess').fadeOut(); } }); }); });
indexController.class.php
<?phpnamespace Home\Controller;use Think\Controller;class IndexController extends Controller { public function index(){ $this->display('index'); } public function test(){ $name=$_POST['name']; $password=$_POST['password']; $arr['flag']=0; if($name=='postbird'){ if($password=='123456'){ $arr['flag']=1; //进行数据封装 $this->ajaxReturn($arr,json); }else{ $this->ajaxReturn($arr,json); //返回json数据 } }else{ $this->ajaxReturn($arr,json); } }}
2)、1.7版本后jQuery废除了live事件,而是采用了统一的api方式,这样对程序开发人员来说是个好消息,不用记那么多api了,统一用on的方式调用
<pre name="code" class="javascript">$(document).on("click", selector, function(){ // 事件逻辑})
新版本推荐用on的方式,document尽量是要绑定事件的最小包含元素,比如父元素,这样性能会更好,selector则是要绑定元素的选择器。
4、ThinkPHP路径:
js中需要进行URL的获取,否则ajax参数传递地址无法获得、
ThinkPHP推荐使用模板替换,一种方案是:
在 <script src="__PUBLIC__/indexAjax.js"></script>之前定义变量 APPURL
这样在js中就可以使用 APPURL+”/Home/User/Check“; 作为处理地址。
以上为关于ThinkPHP进行ajax无刷新验证的相关总结。
有任何疑问或指正,请在下方评论。谢谢。postbirdhttp://www.ptbird.cnThere I am , in the world more exciting!
1 0
- ThinkPHP+JQuery实现ajax无刷新登录验证(详解+相关问题)
- Struts 2 + JQuery +Ajax 无刷新 登录验证
- Ajax+存储过程实现无刷新登录验证功能
- ThinkPHP学习笔记(十五)使用Ajax和Jquery来实现页面无刷新
- Struts2+jquery+ajax+json实现无刷新登陆验证.
- ajax+thinkphp框架实现无刷新分页
- ajax+thinkphp框架实现无刷新分页
- thinkphp下实现ajax无刷新分页
- 基于jquery ajax 用户无刷新登录
- jQuery ajax 无刷新登录完整代码
- jquery-ajax-无刷新验证--案例6
- jquery实现ajax验证登录
- JQuery+Ajax实现登录验证
- ajax 无刷新实现用户登录
- ajax 无刷新实现用户登录
- jquery ajax 页面无刷新修改DOM----Thinkphp
- Jquery+ajax+PHP 基于thinkPHP的无刷新分页
- AJAX和WebService实现邮箱验证(无刷新)
- 【LVL1_6_c】【思考题】【2】解释这些数据声明都代表的什么意思?
- 生产者消费者问题【线程中ConcurrentLinkedQueue】
- Android 图片选择裁剪工具 PictureTool
- JSP实现HTML网页中分页查询Mysql数据库数据
- PL/SQL 64位发布啦!!!
- ThinkPHP+JQuery实现ajax无刷新登录验证(详解+相关问题)
- php生成网页桌面快捷方式
- Git下使用版本回退粗暴解决冲突问题
- 线性表链式存储结构实现 --单链表
- JSP实现HTML网页对Mysql数据库的数据修改
- 线性表链式存储结构实现--静态链表
- poj-3579 Median
- STL vector用法介绍
- 线性表链式存储结构实现 --单向循环链表