AJAX04 JQ的AJAX
一、jQuery中的Ajax
1.jQuery为我们提供了更强大的Ajax封装
$.ajax({}) 可配置方式发起Ajax请求
$.get() 以GET方式发起Ajax请求
$.post() 以POST方式发起Ajax请求
$('form').serialize() 序列化表单(即格式化key=val&key=val)
url 接口地址
type 请求方式
timeout 请求超时
dataType 服务器返回格式
data 发送请求数据
beforeSend: function () {} 请求发起前调用
success 成功响应后调用
error 错误响应时调用
complete 响应完成时调用(包括成功和失败)
重要
$.ajax({}) 可配置方式发起Ajax请求
$.get() 以GET方式发起Ajax请求
$.post() 以POST方式发起Ajax请求
$.ajaxSetup 设置公共的默认的ajax数据配置
$(form表单元素).serialize(); 序列化表单数据
beforeSend: 在发起请求前执行
success : 请求成功时执行
error : 错误的时候执行
complete : 请求完成时执行(无论成功与否)
type:请求方式
url :地址
data:请求数据
dataType:预期服务器给我们返回的数据格式 xml text json script等
timeout:请求超时 单位是ms 多少毫秒以内请求算成功,超过时间就不请求了

jQuery Ajax介绍
http://www.w3school.com.cn/jquery/jquery_ref_ajax.asp
2.案例练习
1、Loading状态
2、禁止重复提交
3、表单处理
4、数据验证
接口化开发
请求地址即所谓的接口,通常我们所说的接口化开发,其实是指一个接口对应一个功能,并且严格约束了请求参数和响应结果的格式,这样前后端在开发过程中,可以减少不必要的讨论,从而并行开发,可以极大的提升开发效率,另外一个好处,当网站进行改版后,服务端接口只需要进行微调。
二、模板引擎
1.原理剖析
其本质是利用正则表达式,替换模板当中预先定义好的标签。
正则表达式exec用法
http://www.w3school.com.cn/jsref/jsref_exec_regexp.asp
2. 流行模板引擎
BaiduTemplate:http://tangram.baidu.com/BaiduTemplate/
ArtTemplate:https://github.com/aui/artTemplate
velocity.js:https://github.com/shepherdwind/velocity.js/
Handlebars:http://handlebarsjs.com/
http://blog.jobbole.com/56689/
3.artTemplate
1、引入template-native.js
2、<% 与 %> 符号包裹起来的语句则为模板的逻辑表达式
3、<%= content %>为输出表达式
案例介绍
1.模板案例:
<!DOCTYPE html><htmllang="en"><head><metacharset="UTF-8"><title>Ajax</title><style>body {margin:0;padding:0;background-color:#F7F7F7;}h3 {text-align: center;}.chatbox {width:500px;height:500px;margin:0auto;border:1px solid #CCC;background-color:#FFF;border-radius:5px;}.messages {height:350px;padding:20px40px;box-sizing: border-box;border-bottom:1px solid #CCC;overflow: scroll;}.messages h5 {font-size:20px;margin:10px0;}.messages p {font-size:18px;margin:0;}.self{text-align: left;}.other {text-align: right;}.form {height:150px;}.form .input {height:110px;padding:10px;box-sizing: border-box;}.form .btn {height:40px;box-sizing: border-box;border-top:1px solid #CCC;}.form textarea {display: block;width:100%;height:100%;box-sizing: border-box;border: none;resize: none;outline: none;font-size:20px;}.form input {display: block;width:100px;height:30px;margin-top:5px;margin-right:20px;float: right;}</style></head><body><h3>简单的Ajax实例</h3><divclass="chatbox"><divclass="messages"></div><divclass="form"><divclass="input"><textarea></textarea></div><divclass="btn"><inputtype="button"value="发送"></div></div></div><scriptsrc="js/jquery.min.js"></script><scriptsrc="js/template-native.js"></script><script>// 1.准备模板// 2.准备对象数据var data={};var html='';var omessages=$('.messages');$('.btn input').on('click',function(){// 我说var selfResult=$('.input textarea').val();data={flag:"self",text:selfResult}// 拼装html=template('tmpl',data);// console.log(html);omessages.append(html);$('.input textarea').val('');// 对方说$.ajax({type:'post',url:'chat.php',data:null,success:function(result){data={flag:'other',text:result}html=template('tmpl',data);omessages.append(html);}})})</script><!--// 1.准备模板<div class="self"><h5>我说</h5><p>你好</p></div><div class="other"><h5>对方说</h5><p>你好</p></div>--><!--假设要输出<%=%>--><!--flag做判断--><scripttype="text/template"id='tmpl'><div class="<%= flag %>"><%if(flag=="self"){%><h5>我说</h5><%}else{%><h5>对方说</h5><%}%><p><%= text %></p></div></script></body></html>
<?php- $messages = array(
'我在睡觉','你要干嘛小帅哥','小帅哥来嘛','大爷来爽爽','啵啵啵');echo $messages[array_rand($messages)];sleep(1);- ?>
简单的表单验证案例
<!DOCTYPE html><htmllang="en"><head><metacharset="UTF-8"><title>jQuery Ajax</title><style>body {margin:0;padding:0;background-color:#F7F7F7;}ul {margin:0;padding:50px;list-style: none;}.register{width:800px;margin:50pxauto;background-color:#FFF;border:1px solid #CCC;border-radius:5px;}li {display: flex;margin:20px0;}label,input {display: block;float: left;height:46px;font-size:24px;box-sizing: border-box;color:#333;}label {width:200px;line-height:46px;margin-right:30px;text-align: right;}input {width:320px;padding:8px;line-height:1;outline: none;position: relative;}input.code {width:120px;}input.verify {width:190px;margin-left:10px;}input.disabled {background-color:#CCC !important;}input[type=button]{border: none;color:#FFF;background-color:#E64145;border-radius:4px;cursor: pointer;}.tips {position:fixed;top:0;width:100%;height:40px;text-align: center;}.tips p {min-width:300px;max-width:400px;line-height:40px;margin:0auto;color:#FFF;display: none;background-color:#C91623;}</style></head><body><divclass="register"><formid="ajaxForm"><ul><li><labelfor="">用户名</label><inputtype="text"name="name"class="name"></li><li><labelfor="pass">请设置密码</label><inputtype="password"name="pass"class="pass"></li><li><labelfor="re">请确认密码</label><inputtype="password"name="repass"class="repass"></li><li><labelfor="">验证手机</label><inputtype="text"name="mobile"class="mobile"></li><li><labelfor="">短信验证码</label><inputtype="text"name="code"class="code"><inputtype="button"value="获取验证码"class="verify"></li><li><labelfor=""></label><inputtype="button"value="立即注册"class="submit"></li></ul></form></div><!--提示信息--><divclass="tips"><p>用户名不能为空</p></div><scriptsrc='js/jquery.min.js'></script><script>// 1.注册// 01.获取注册按钮&02.给注册按钮绑定事件$('.submit').on('click',function(){var formData=$('#ajaxForm').serialize();// 把this缓存起来var _this=$(this);// 4.当发生一次提交,过程中就禁止提交了 (禁止多次点击)if(_this.hasClass("disabled")){// 禁止提交returnfalse;}// 03.发起ajax请求$.ajax({type:'post',url:'register.php',data:formData,//前端校验beforeSend:function(){// 0.当用户名为空的时候, 提示用户名为空 不发送请求if($('.name').val()==''){$('.tips p').text('用户名不能为空').fadeIn(500).delay(1500).fadeOut(500);returnfalse;}// 2.当两次密码不一致的时候,提示密码不一致 不能提交if($('.pass').val()!=$('.repass').val()||$('.pass').val()==''){// 123 1234// 空 1234// 1.输入密码和确认密码其中有一个是写的// 2.两个都写 ,内容不一直$('.tips p').text('密码错误或不一致').fadeIn(500).delay(1500).fadeOut(500);returnfalse;}// 3.当提交过程中,提交按钮文字变成...提交中 背景色编程灰色_this.val('...提交中').addClass('disabled');},//请求成功返回结果success:function(result){// 1.当用户输入用户名,后台能拿到,前端验证是否等于用户输入的用户名,// 如果等于,就代表注册成功// console.log(result);var obj=JSON.parse(result);console.log(obj);// 输出用户名console.log(obj['msg']);// console.log(obj['result']['name']);$('.tips p').text(obj['msg']).fadeIn(500).delay(1500).fadeOut(500);},//发生错误的时候,预报信息error:function(err){},//完成时状态还原complete:function(){// 5.当请求完成时,按钮接着变回原样_this.val('立即注册').removeClass('disabled');}})})// 5.当不输入的时候或手机格式错误的时候,都提示手机格式错误// 步骤: 1.获取获取验证码的按钮// 2.注册点击事件$('.verify').on('click',function(){// 3.发起请求var _mobileNumber=$('.mobile').val();var regMobile=/^1\d{10}$/;// 以1开头 等于11位var _this=$(this);$.ajax({type:'post',url:'getCode.php',data:{phoneNumber:_mobileNumber},beforeSend:function(){// 5.当不输入的时候或手机格式错误的时候,都提示手机格式错误if(!regMobile.test(_mobileNumber)||_mobileNumber==''){$('.tips p').text('手机号码有误').fadeIn(500).delay(1500).fadeOut(500);returnfalse;}// 6.当输入手机号,点击获取验证码的时候,出现倒计时,获取验证码按钮变成灰色// _this.val(""+"秒后重新获取").addClass('disabled');var second=10;var t=setInterval(function(){_this.val(second--+"秒后重新获取").addClass('disabled');if(second<0){clearInterval(t);_this.val("获取验证码").removeClass('disabled');}},1000)},success:function(result){// 7.当输入正确的手机号,要返回一个验证码console.log(result);},complete:function(){}})})</script></body></html>
<?phpheader('Content-Type:text/html;charset=utf-8');// 服务端验证if($_POST['name']){// 只要有一个表单项填写了内容,即认为注册成功$arr = array('code'=>10000,'msg'=>'注册成功,恭喜 '.$_POST['name'].'用户。','result'=>array('name'=>$_POST['name']));}else{$arr = array('code'=>10002,'msg'=>'注册失败','result'=>'一些信息');}/*** 接口化开发* 前后端会事先约定传递的参数格式,以及返回的数据格式*/echo json_encode($arr);sleep(3);?>
AJAX04 JQ的AJAX的更多相关文章
- 关于jQ的Ajax操作
jQ的Ajax操作 什么是AJAX AJAX = 异步的javascript和XML(Asynchronous Javascript and XML) 它不是一门编程语言,而是利用JavaScript ...
- jq的ajax方法
相较与js异步对象的繁琐,jq的ajax对象结构更加清晰 一:ajax对象简述 ajax(Asynchronous JavaScript and XML),异步的xml和js对象,主要用于在不刷新全局 ...
- jq使用ajax请求,返回状态 canceled错误
在使用jq,ajax请求时出现该错误 原因:button按钮类型为type=submit ,script中又自定用botton按钮点击提交ajax,造成冲突. 解决方法:button按钮类型改为 ty ...
- 【jQuery】 JQ和AJAX
AJAX AJAX全称异步 JavaScript 和 XML(Asynchronous JavaScript and XML),是一种用于网页前端和网站后台进行数据交互的手段.关于AJAX的详细介绍在 ...
- jq的ajax交互封装
jq封装的ajax,然后 在此前和此后都是很多要考虑的 ,何不 想想构思封装下. 下面: 基本上网页都存在各种ajax,使得网页变得更加易于操作. 举个长长的例子吧: <input type= ...
- js、jq、ajax之间的关系
一句话:js是一种客户端脚本语言,jq是在js基础上封装起来的一个开发工具,ajax是基于js的一种技术(异步刷新). javascript是一种在客户端执行的脚本语言,用来给网页添加动态功能,使网页 ...
- jq之ajax以及json数据传递
<html> <head><meta http-equiv="Content-Type" content="text/html; chars ...
- jq+jsonp+ajax解决跨域问题
Jsonp(JSON with Padding)是资料格式 json 的一种“使用模式”,可以让网页从别的网域获取资料. 关于Jsonp更详细的资料请参考http://baike.baidu.com/ ...
- angular 和jq 的AJAX的请求区别
最近项目中使用angular,结果发现后台没法获取参数,所以,稍微研究了一下两者在发送ajax时的区别. 注意angular和jquery的ajax请求是不同的. 在jquery中,官方文档解释con ...
随机推荐
- 红外遥控NEC协议使用总结
最近做了一个调试红外遥控三色灯的实习,花了一个多月的时间研究基于NEC协议的红外遥控,下面是这次实习技术方面的总结. 一.NEC协议特征: 8位地址和8位命令长度 每次传输两遍地址(用户码)和命令(按 ...
- IOS零碎技术整理(3)-获取wifi列表
1. 该功能实现基于MobileApple80211框架来进行开发,而目前该框架成为了私有框架,其中的API均为私有API. 如果使用这些API可能导致应用不能上app store或者ios版本升 ...
- MyBatis入门学习教程-使用MyBatis对表执行CRUD操作
上一篇MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对use ...
- 解决错误: Failed to load class "org.slf4j.impl.StaticLoggerBinder"
当报这个错时,就很难看到我们自己输出的日志,系统运行情况后台无法得到输出.解决方案是加入以下依赖: <dependency> <groupId>org.slf4j</gr ...
- undefined reference to `_init'问题解决
今天利用CDT 的eclipse调试程序,遇到下面的问题: d:/plugin/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi ...
- [SPI]SPI协议详解
转自:https://my.oschina.net/freeblues/blog/67400 1.SPI协议简介 1.1.SPI协议概括 SPI,是英语Serial Peripheral interf ...
- 用户输入函数--raw_input、input
1.raw_input python2.7用户输入字符串的话用raw_input.如果使用input输入字符串的话需要先把字符串放到变量中才可,但是用input输入数字的话是可以直接输入的,所以说在p ...
- CSS中的绝对定位与相对定位
层级关系为:<div ----------- position:relative; 不是最近的祖先定位元素,不是参照物<div----------没有设置为定位元素,不是参照物<di ...
- 在Eclipse中使用JUnit4进行单元测试(中级篇)
我们继续对初级篇中的例子进行分析.初级篇中我们使用Eclipse自动生成了一个测试框架,在这篇文章中,我们来仔细分析一下这个测试框架中的每一个细节,知其然更要知其所以然,才能更加熟练地应用JUnit4 ...
- AndroidUI设计之布局-详细解析布局实现
写完博客的总结 : 以前没有弄清楚的概念清晰化 父容器与本容器属性 : android_layout...属性是本容器的属性, 定义在这个布局管理器的LayoutParams内部类中, 每个布局管理器 ...