一、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.jshttps://github.com/shepherdwind/velocity.js/

Handlebars:http://handlebarsjs.com/

http://blog.jobbole.com/56689/

3.artTemplate

1、引入template-native.js

2、<% 与  %> 符号包裹起来的语句则为模板的逻辑表达式

3、<%= content %>为输出表达式

案例介绍

1.模板案例:

  

  1. <!DOCTYPE html>
  2. <htmllang="en">
  3. <head>
  4. <metacharset="UTF-8">
  5. <title>Ajax</title>
  6. <style>
  7. body {
  8. margin:0;
  9. padding:0;
  10. background-color:#F7F7F7;
  11. }
  12. h3 {
  13. text-align: center;
  14. }
  15. .chatbox {
  16. width:500px;
  17. height:500px;
  18. margin:0auto;
  19. border:1px solid #CCC;
  20. background-color:#FFF;
  21. border-radius:5px;
  22. }
  23. .messages {
  24. height:350px;
  25. padding:20px40px;
  26. box-sizing: border-box;
  27. border-bottom:1px solid #CCC;
  28. overflow: scroll;
  29. }
  30. .messages h5 {
  31. font-size:20px;
  32. margin:10px0;
  33. }
  34. .messages p {
  35. font-size:18px;
  36. margin:0;
  37. }
  38. .self{
  39. text-align: left;
  40. }
  41. .other {
  42. text-align: right;
  43. }
  44. .form {
  45. height:150px;
  46. }
  47. .form .input {
  48. height:110px;
  49. padding:10px;
  50. box-sizing: border-box;
  51. }
  52. .form .btn {
  53. height:40px;
  54. box-sizing: border-box;
  55. border-top:1px solid #CCC;
  56. }
  57. .form textarea {
  58. display: block;
  59. width:100%;
  60. height:100%;
  61. box-sizing: border-box;
  62. border: none;
  63. resize: none;
  64. outline: none;
  65. font-size:20px;
  66. }
  67. .form input {
  68. display: block;
  69. width:100px;
  70. height:30px;
  71. margin-top:5px;
  72. margin-right:20px;
  73. float: right;
  74. }
  75. </style>
  76. </head>
  77. <body>
  78. <h3>简单的Ajax实例</h3>
  79. <divclass="chatbox">
  80. <divclass="messages">
  81. </div>
  82. <divclass="form">
  83. <divclass="input">
  84. <textarea></textarea>
  85. </div>
  86. <divclass="btn">
  87. <inputtype="button"value="发送">
  88. </div>
  89. </div>
  90. </div>
  91. <scriptsrc="js/jquery.min.js"></script>
  92. <scriptsrc="js/template-native.js"></script>
  93. <script>
  94. // 1.准备模板
  95. // 2.准备对象数据
  96. var data={};
  97. var html='';
  98. var omessages=$('.messages');
  99. $('.btn input').on('click',function(){
  100. // 我说
  101. var selfResult=$('.input textarea').val();
  102. data={
  103. flag:"self",
  104. text:selfResult
  105. }
  106. // 拼装
  107. html=template('tmpl',data);
  108. // console.log(html);
  109. omessages.append(html);
  110. $('.input textarea').val('');
  111. // 对方说
  112. $.ajax({
  113. type:'post',
  114. url:'chat.php',
  115. data:null,
  116. success:function(result){
  117. data={
  118. flag:'other',
  119. text:result
  120. }
  121. html=template('tmpl',data);
  122. omessages.append(html);
  123. }
  124. })
  125. })
  126. </script>
  127. <!--
  128. // 1.准备模板
  129. <div class="self">
  130. <h5>我说</h5>
  131. <p>你好</p>
  132. </div>
  133. <div class="other">
  134. <h5>对方说</h5>
  135. <p>你好</p>
  136. </div>-->
  137. <!--假设要输出<%=%>-->
  138. <!--flag做判断-->
  139. <scripttype="text/template"id='tmpl'>
  140. <div class="<%= flag %>">
  141. <%if(flag=="self"){%>
  142. <h5>我说</h5>
  143. <%}else{%>
  144. <h5>对方说</h5>
  145. <%}%>
  146. <p><%= text %></p>
  147. </div>
  148. </script>
  149. </body>
  150. </html>
  1. <?php
  2. $messages = array(
  3. '我在睡觉',
  4. '你要干嘛小帅哥',
  5. '小帅哥来嘛',
  6. '大爷来爽爽',
  7. '啵啵啵'
  8. );
  9. echo $messages[array_rand($messages)];
  10. sleep(1);
  11. ?>

简单的表单验证案例

  1. <!DOCTYPE html>
  2. <htmllang="en">
  3. <head>
  4. <metacharset="UTF-8">
  5. <title>jQuery Ajax</title>
  6. <style>
  7. body {
  8. margin:0;
  9. padding:0;
  10. background-color:#F7F7F7;
  11. }
  12. ul {
  13. margin:0;
  14. padding:50px;
  15. list-style: none;
  16. }
  17. .register{
  18. width:800px;
  19. margin:50pxauto;
  20. background-color:#FFF;
  21. border:1px solid #CCC;
  22. border-radius:5px;
  23. }
  24. li {
  25. display: flex;
  26. margin:20px0;
  27. }
  28. label,
  29. input {
  30. display: block;
  31. float: left;
  32. height:46px;
  33. font-size:24px;
  34. box-sizing: border-box;
  35. color:#333;
  36. }
  37. label {
  38. width:200px;
  39. line-height:46px;
  40. margin-right:30px;
  41. text-align: right;
  42. }
  43. input {
  44. width:320px;
  45. padding:8px;
  46. line-height:1;
  47. outline: none;
  48. position: relative;
  49. }
  50. input.code {
  51. width:120px;
  52. }
  53. input.verify {
  54. width:190px;
  55. margin-left:10px;
  56. }
  57. input.disabled {
  58. background-color:#CCC !important;
  59. }
  60. input[type=button]{
  61. border: none;
  62. color:#FFF;
  63. background-color:#E64145;
  64. border-radius:4px;
  65. cursor: pointer;
  66. }
  67. .tips {
  68. position:fixed;
  69. top:0;
  70. width:100%;
  71. height:40px;
  72. text-align: center;
  73. }
  74. .tips p {
  75. min-width:300px;
  76. max-width:400px;
  77. line-height:40px;
  78. margin:0auto;
  79. color:#FFF;
  80. display: none;
  81. background-color:#C91623;
  82. }
  83. </style>
  84. </head>
  85. <body>
  86. <divclass="register">
  87. <formid="ajaxForm">
  88. <ul>
  89. <li>
  90. <labelfor="">用户名</label>
  91. <inputtype="text"name="name"class="name">
  92. </li>
  93. <li>
  94. <labelfor="pass">请设置密码</label>
  95. <inputtype="password"name="pass"class="pass">
  96. </li>
  97. <li>
  98. <labelfor="re">请确认密码</label>
  99. <inputtype="password"name="repass"class="repass">
  100. </li>
  101. <li>
  102. <labelfor="">验证手机</label>
  103. <inputtype="text"name="mobile"class="mobile">
  104. </li>
  105. <li>
  106. <labelfor="">短信验证码</label>
  107. <inputtype="text"name="code"class="code">
  108. <inputtype="button"value="获取验证码"class="verify">
  109. </li>
  110. <li>
  111. <labelfor=""></label>
  112. <inputtype="button"value="立即注册"class="submit">
  113. </li>
  114. </ul>
  115. </form>
  116. </div>
  117. <!--提示信息-->
  118. <divclass="tips">
  119. <p>用户名不能为空</p>
  120. </div>
  121. <scriptsrc='js/jquery.min.js'></script>
  122. <script>
  123. // 1.注册
  124. // 01.获取注册按钮&02.给注册按钮绑定事件
  125. $('.submit').on('click',function(){
  126. var formData=$('#ajaxForm').serialize();
  127. // 把this缓存起来
  128. var _this=$(this);
  129. // 4.当发生一次提交,过程中就禁止提交了 (禁止多次点击)
  130. if(_this.hasClass("disabled")){
  131. // 禁止提交
  132. returnfalse;
  133. }
  134. // 03.发起ajax请求
  135. $.ajax({
  136. type:'post',
  137. url:'register.php',
  138. data:formData,
  139. //前端校验
  140. beforeSend:function(){
  141. // 0.当用户名为空的时候, 提示用户名为空 不发送请求
  142. if($('.name').val()==''){
  143. $('.tips p').text('用户名不能为空')
  144. .fadeIn(500)
  145. .delay(1500)
  146. .fadeOut(500);
  147. returnfalse;
  148. }
  149. // 2.当两次密码不一致的时候,提示密码不一致 不能提交
  150. if($('.pass').val()!=$('.repass').val()||$('.pass').val()==''){
  151. // 123 1234
  152. // 空 1234
  153. // 1.输入密码和确认密码其中有一个是写的
  154. // 2.两个都写 ,内容不一直
  155. $('.tips p').text('密码错误或不一致')
  156. .fadeIn(500)
  157. .delay(1500)
  158. .fadeOut(500);
  159. returnfalse;
  160. }
  161. // 3.当提交过程中,提交按钮文字变成...提交中 背景色编程灰色
  162. _this.val('...提交中').addClass('disabled');
  163. },
  164. //请求成功返回结果
  165. success:function(result){
  166. // 1.当用户输入用户名,后台能拿到,前端验证是否等于用户输入的用户名,
  167. // 如果等于,就代表注册成功
  168. // console.log(result);
  169. var obj=JSON.parse(result);
  170. console.log(obj);
  171. // 输出用户名
  172. console.log(obj['msg']);
  173. // console.log(obj['result']['name']);
  174. $('.tips p').text(obj['msg'])
  175. .fadeIn(500)
  176. .delay(1500)
  177. .fadeOut(500);
  178. },
  179. //发生错误的时候,预报信息
  180. error:function(err){},
  181. //完成时状态还原
  182. complete:function(){
  183. // 5.当请求完成时,按钮接着变回原样
  184. _this.val('立即注册').removeClass('disabled');
  185. }
  186. })
  187. })
  188. // 5.当不输入的时候或手机格式错误的时候,都提示手机格式错误
  189. // 步骤: 1.获取获取验证码的按钮// 2.注册点击事件
  190. $('.verify').on('click',function(){
  191. // 3.发起请求
  192. var _mobileNumber=$('.mobile').val();
  193. var regMobile=/^1\d{10}$/;// 以1开头 等于11位
  194. var _this=$(this);
  195. $.ajax({
  196. type:'post',
  197. url:'getCode.php',
  198. data:{phoneNumber:_mobileNumber},
  199. beforeSend:function(){
  200. // 5.当不输入的时候或手机格式错误的时候,都提示手机格式错误
  201. if(!regMobile.test(_mobileNumber)||_mobileNumber==''){
  202. $('.tips p').text('手机号码有误')
  203. .fadeIn(500)
  204. .delay(1500)
  205. .fadeOut(500);
  206. returnfalse;
  207. }
  208. // 6.当输入手机号,点击获取验证码的时候,出现倒计时,获取验证码按钮变成灰色
  209. // _this.val(""+"秒后重新获取").addClass('disabled');
  210. var second=10;
  211. var t=setInterval(function(){
  212. _this.val(second--+"秒后重新获取").addClass('disabled');
  213. if(second<0){
  214. clearInterval(t);
  215. _this.val("获取验证码").removeClass('disabled');
  216. }
  217. },1000)
  218. },
  219. success:function(result){
  220. // 7.当输入正确的手机号,要返回一个验证码
  221. console.log(result);
  222. },
  223. complete:function(){}
  224. })
  225. })
  226. </script>
  227. </body>
  228. </html>
  1. <?php
  2. header('Content-Type:text/html;charset=utf-8');
  3. // 服务端验证
  4. if($_POST['name']){
  5. // 只要有一个表单项填写了内容,即认为注册成功
  6. $arr = array(
  7. 'code'=>10000,
  8. 'msg'=>'注册成功,恭喜 '.$_POST['name'].'用户。',
  9. 'result'=>array('name'=>$_POST['name'])
  10. );
  11. }else{
  12. $arr = array(
  13. 'code'=>10002,
  14. 'msg'=>'注册失败',
  15. 'result'=>'一些信息'
  16. );
  17. }
  18. /**
  19. * 接口化开发
  20. * 前后端会事先约定传递的参数格式,以及返回的数据格式
  21. */
  22. echo json_encode($arr);
  23. sleep(3);
  24. ?>

来自为知笔记(Wiz)

转载于:https://www.cnblogs.com/litao666/p/6070408.html

AJAX04 JQ的AJAX相关推荐

  1. axios如何在nodejs项目里封装_【面经】jq 中 ajax 和 axios 区别,瀑布流布局,添加删除事件...

    [jq 中 ajax 和 axios 区别] jq的ajax 1.本身是针对MVC的编程,不符合现在前端MVVM的浪潮 2.JQuery整个项目太大,单纯使用ajax却要引入整个JQuery不合理 a ...

  2. jquery中ajax完整例子get,jq的ajax方法,jquery中ajax完整例子

    jq的ajax方法,jquery中ajax完整例子 相较与js异步对象的繁琐,jq的ajax对象结构更加清晰 一:ajax对象简述 ajax(Asynchronous JavaScript and X ...

  3. ajax ssm 页面跳转_SSM用jq整合Ajax入门案例讲解

    SSM用Jq整合Ajax 我就是一个程序小白,很多原理都不懂,下面的内容只能让新手知道怎么用. Ajax 废话少说,总之像点赞,评论,之类的很多功能没必要进行页面跳转,更没必要牺牲整个页面来刷新局部区 ...

  4. jq请求Ajax数据

    <!DOCTYPE html> <html><head><meta charset="UTF-8"><title>jq请 ...

  5. 手把手教你用JQ调用ajax(附免费永久后台URL)

    关于jQ的Ajax操作 前沿 关于AJAX(百度百科) JQ调用AJAX实例 1.jQuery的load()方法 2.jquery的getJSON方法 3.jquery的$.get()方法 4.jqu ...

  6. 什么是ajax,一篇文章带你了解ajax(JQ的ajax封装讲解)

    一:什么是ajax ajax是异步编程,可以让用户不用刷新页面就可以访问到服务器的数据,比如我们常见的今日头条,打开一个页面他页面中的数据并不是很多,但是我们在不停向下滚动的时候,我们并没有刷新页面, ...

  7. jq的ajax和模块引擎

    之前我们写ajax都是用原生js写的,但这样写有时候就显得有点繁琐,其实我们也可以用jq来写,这样更简单,但jq写法跟原生的有点不一样,他可以分为单个类型,和一个总的: 第一种是$.get: 第二种是 ...

  8. HTML_简单JQ的AJAX响应式交互

    AJAX技术是动态交互式技术,基于jq实现! AJAX是不需要刷新页面就可以达到更新页面的方式,类似Windows下的局部刷新机制! 以往的HTMLget请求一个文件时,获取到了文件内容然后需要刷新才 ...

  9. jq的ajax上传文件

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

最新文章

  1. 解决mysql“Access denied for user‘root‘@‘IP地址‘“问题
  2. python有哪些作用-Python都有哪些强大的功能
  3. 跟我学 Java 8 新特性之 Stream 流(六)收集
  4. matlab 安装glpk,mac上安装GLPK
  5. 【机器视觉学习笔记】最近邻插值实现图片任意角度旋转(C++)
  6. mysql.data.dll win10_【MySQL】Windows10下安装
  7. 考研编程练习----畅通工程
  8. 使用java实现打印功能_java实现打印功能有没有比较好的方式?
  9. gensim读取已训练模型LDA模型的模型与dictionary
  10. 数据结构 创建顺序栈
  11. 【报告分享】5G零售行业应用白皮书.pdf(附下载链接)
  12. WinSCP 连接 Ubuntu 拒绝的问题
  13. 电脑C盘的大小影响电脑正常使用吗?
  14. 吝啬SAT问题是NP完全问题的证明
  15. Premiere Pro CC2019安装详细教程
  16. 北大核心期刊2020_职称期刊论文发表 | 会计如何发表北大核心论文
  17. Codeforces Round #829 cf1753A Cowardly Rooks
  18. MySQL死锁问题如何分析锁表后查看死锁和去除死锁快速解决方法
  19. 电力电子应用技术的matlab仿真
  20. 那些年我们玩过的Spark下的Standalone集群模型

热门文章

  1. Android开发手记(23) Notification
  2. Ubuntu 通过Deb 安装 MySQL 5.5 [转载]
  3. 在delphi中嵌入腳本語言--(譯)RemObjects Pascal Script使用說明(1)(譯)
  4. java 文件压缩_java实现文件压缩
  5. 基于tensorflow实现图像分类——理解神经网络运作过程、tensorflow入门
  6. FPGA存储器DDR5简介
  7. lamp 重启mysql_lamp常用命令 --Ubuntu下启动/重启/停止apache,mysql服务器
  8. 卡尔曼滤波算法-简易版
  9. 2021.C/C++静态代码分析工具
  10. 【好文链接】从原理上搞懂PID