位置: IT常识 - 正文

ajax - 接口、表单、模板引擎(ajax写接口)

编辑:rootadmin
1. 今天继续ajax的一个学习,首先明确一个观念,接口,什么是接口,当使用ajax请求数据时,被请求的url就叫做数据接口也就是接口,注意每个接口必须有请求方式,这里有一个接口的测试工具,postman自称是全球最快的,反正使用起来没多大毛病,使用这个软件的时候有一个注意点就是在post请求的时候 ...

推荐整理分享ajax - 接口、表单、模板引擎(ajax写接口),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:ajax请求接口数据,ajax调用后端接口,ajax调用接口实例,ajax调用外部接口,ajax调用接口实例,ajax调用外部接口,ajax写接口,ajax请求接口数据,内容如对您有帮助,希望把文章链接给更多的朋友!

1.

今天继续ajax的一个学习,首先明确一个观念,接口,什么是接口,当使用ajax请求数据时,被请求的url就叫做数据接口也就是接口,注意每个接口必须有请求方式,这里有一个接口的测试工具,postman自称是全球最快的,反正使用起来没多大毛病,使用这个软件的时候有一个注意点就是在post请求的时候,在body里面输入参数要选择x-www-form-这个选项才行,然后是接口文档,我们如果要调用接口,那肯定是要参照接口文档的,里面的包含这个接口的所有信息,一般一个接口文档大致分为以下五个内容:

①接口名称:能够一眼看出这个接口是个什么类型的接口

②url:这个不用多说,接口的调用地址

③调用方式:会给你说明这个接口要用get还是post

④参数格式:接口需传递的参数,每个参数必须包含参数名称、参数类型以及参数说明

⑤响应格式:接口返回值的描述,一般包含数据名称类型说明

2.

然后继续看到一个普遍应用,表单,我们说的form表单一般是拿来收集数据的,然后再form里面有一些属性比如

action表示向何处发送表单数据,如果未指定就是当前页面

target是在何处打开这个action,就跟a标签的一样

method是发送action的方式可以为get或者post默认是get,get适合用来提交一些简单数据的,post适合提交复杂数据,我们在项目中用到post居多

enctype是规定发送表单数据前如何对数据进行编码,一般默认是前面提到的x-www-form-urlencoded,但是这里要注意下如果说是包含文件上传的表单的话,这里的值要改为multipart/form-data

继续看到表单的同步提交,就是当你一点击提交,页面就会发生跳转到action的地址上去,这样的用户体验极差,而且页面之前的数据和状态都会丢失,怎么来解决这一现象,我们只需要让表单控件负责采集数据,ajax来负责提交即可。

如果要用到ajax跟表单的一个配合,首先要知道一个事件也就是submit提交事件,然后在这里面组织表单默认行为,因为每次一点提交就会刷新页面,然后通过一个函数可快速获取到表单的数据,。serialize()使用这个有个前提就是必须为表单里面每个元素添加name属性就像面这样

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title></head><body> <form action="/login"> <input type="text" name="uname"> <input type="password" name="password"> <input type="submit" value="提交"> </form> <script src="../day01/lib/jquery.js"></script> <script> $('form').on('submit', e => { console.log(11); e.preventDefault() // 这里闹了个大乌龙,刚开始我是用的$(this)我就说为什么一直获取不到数据思来想去也就是这里的问题应该,后来才知道我这里明明用的是 // 箭头函数啊,箭头函数的this是谁啊能乱用吗? var str = $('form').serialize() console.log(str); }) </script></body></html>ajax - 接口、表单、模板引擎(ajax写接口)

案例:评论列表,页面还是才去bootstrap,vscode可安装bs3实现快速bootstrap编程,这个案例就是通过接口先获取评论列表的数据,渲染到html上,然后通过接口发表评论

.

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <link rel="stylesheet" href="../day01/lib/bootstrap.css"> <script src="../day01/lib/jquery.js"></script></head><body style="padding: 15px;"> <div class="panel panel-primary"> <div class="panel-heading"> <h3 class="panel-title">发表评论</h3> </div> <div class="panel-body"> <form> <div>评论人</div> <input type="text" class="form-control" name="username"> <div>内容</div> <textarea class="form-control" name="content"></textarea> <button type="submit" class="btn btn-primary">发表评论</button> </form> </div> </div> <ul class="list-group"> </ul> <script> // 1.获取评论列表数据 function getComment() { $.ajax({ type : 'get', url : 'http://www.liulongbin.top:3006/api/cmtlist', success : res => { console.log(res); if (res.status !== 200) { return alert('获取评论列表失败') } else { $('.list-group').empty() $.each(res.data, (i, item) => { $('.list-group').append(`<li class="list-group-item"> <span class="badge" style="background-color: #f0ad4e;">评论时间:${item.time}</span> <span class="badge" style="background-color: #5bc0de;">评论人:${item.username}</span> ${item.content} </li>`) }) } } }) } getComment() // 2.发表评论 $('form').on('submit', function(e) { e.preventDefault() var str = $('form').serialize() // console.log(str); $.post('http://www.liulongbin.top:3006/api/addcmt', str,res => { if (res.status !== 201) { return alert('发表评论失败') } else { getComment() // 2.1 提交成功后应该将表单的内容清空,这里有个快捷方法,直接将form用她的reset方法,但是要先将jq转为原生对象 $('form')[0].reset() } }) }) </script></body></html>

3.

继续看到一个概念叫做模板引擎,看过我之前的案例都知道,我们之前渲染ul的时候都是采取的字符串拼接的方式,对res里面的数据进行遍历,进行字符串拼接,而反复的进行字符串拼接产生的影响就不多多说了吧,大量耗费内存资源,所以这个时候就产生了一种模板引擎就是程序员根据指定模板结构和数据,自动生成一个完整的html界面。

那么当下比较优秀的模板引擎之一 art-template使用它有几个步骤分为安装、导入、定义数据、定义模板、调用template、渲染html,这里面还有一些注意事项

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title></head><body> <div></div> <script src="../day01/lib/jquery.js"></script> <!-- 1.首先第一步肯定是要导入下载的template模板版引擎js --> <script src="./template-web.js"></script> <script type="text/html" id="model"> <!-- // 3.然后第三步定义模板注意也是script来书写,然后还有一个注意点因为平时写的script基本上是text/JavaScript意思就是script里面解析的 // 的是js代码,但是这里我们既然是html模板所以就不能忆原来那种方式来默认--> <!-- 这样一添加,连注释都变了 --> <!-- 3.1这里还有一个注意点,在template模板里面变量的占位符是两个花括号 --> <!-- 3.2这里里面的变量写什么就写数据里面的属性名即可 --> <span>{{name}}</span> </script> <script> // 2.导入后其实在js当中就存在了一个template的函数,你一输的话它是有关键字出来的 // 第二步需要定义数据 var data = {name : '张三'} // 4.定义完后继续在这里调用template函数 // 4.1这个函数有两个参数,也是为什么前面要定义两个东西的原因,第一个参数是模板的id(这个id添加在刚在定义模板的script中,而且并不用写#),第二个参数是需要渲染的对象 // 4.2调用完后会有一个返回值注意用一个变量去存储 var strHtml = template('model', data) // 5.都结束后就是最后的渲染到HTML中 console.log(strHtml); $('div').html(strHtml) </script></body></html>

关于模板引擎的使用记住上面我说的步骤就行了,在这个定义模板里面我们用到了一个占位符{{}}这个里面的写法是有讲究的,我们叫做标准语法

①正常输出 可以在里面写{{value/obj.key/arr[0]/a ? a : b}} 这些简单复杂数据都是可以写在里面的

②原义输出 就是如果value是一个html结构那么你要让他在渲染的时候显示出来就需要在前面添加一个@ {{@value}}

③条件输出 {{if 条件}} 执行语句 {{/if}} 当然你可以在中间穿插{{else if 条件}}

④循环输出 {{each 循环的变量}} 在这里面有两个值可以使用 {{$value}}当前乡的值 {{$当前项的索引}} {{/each}}

⑤过滤器 就是当你对{{value}}的值不满意的时候你可以{{value | filterName}} 然后再js代码里面template.defaults.imports.filterName = function(value) {}对这个值进行修改,注意return出这个处理结果,这个filtername是可以自定义的

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title></head><body> <div></div> <script src="../day01/lib/jquery.js"></script> <!-- 1.首先第一步肯定是要导入下载的template模板版引擎js --> <script src="./template-web.js"></script> <script type="text/html" id="model"> <!-- // 3.然后第三步定义模板注意也是script来书写,然后还有一个注意点因为平时写的script基本上是text/JavaScript意思就是script里面解析的 // 的是js代码,但是这里我们既然是html模板所以就不能忆原来那种方式来默认--> <!-- 这样一添加,连注释都变了 --> <!-- 3.1这里还有一个注意点,在template模板里面变量的占位符是两个花括号 --> <!-- 3.2这里里面的变量写什么就写数据里面的属性名即可 --> <span>{{name}}</span> <div>{{regTime | dateFormat}}</div> </script> <script> template.defaults.imports.dateFormat = function(date) { var y = date.getFullYear() var m = date.getMonth() + 1 var d = date.getDate() return y + '-' + m + '-' + d } // 2.导入后其实在js当中就存在了一个template的函数,你一输的话它是有关键字出来的 // 第二步需要定义数据 var data = {name : '张三',regTime : new Date()} // 4.定义完后继续在这里调用template函数 // 4.1这个函数有两个参数,也是为什么前面要定义两个东西的原因,第一个参数是模板的id(这个id添加在刚在定义模板的script中,而且并不用写#),第二个参数是需要渲染的对象 // 4.2调用完后会有一个返回值注意用一个变量去存储 var strHtml = template('model', data) // 5.都结束后就是最后的渲染到HTML中 console.log(strHtml); $('div').html(strHtml) </script></body></html>

4.

我们继续看到正则与字符串的操作,其实解释来看一下模板引擎的一个原理,首先明确一个正则的函数。exec()可以检索字符串中满足正则表达式的,有就返回,没有就返回null。

然后是分组我们将正则里面用括号包起来的内容叫做一个分组,可以通过分组来提取想要的内容。

然后看到replace,其实这些包括正则前面都说过的也可以看前面的一个博文,replace就是字符串的替换方法,可以将参数里面前面一个替换为后面一个。先说到这里看一个代码

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title></head><body> <script> let str = '我是{{name}}' let reg = /{{([a-zA-Z]+)}}/ let regResult = reg.exec(str) console.log(regResult); </script></body></html>

多次replace

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title></head><body> <script> let str = '我叫{{name}}今年{{age}}岁了' let reg = /{{\s*([a-zA-Z]+)\s*}}/ str1 = reg.exec(str) str = str.replace(str1[0],str1[1]) console.log(str); str1 = reg.exec(str) str = str.replace(str1[0],str1[1]) console.log(str); str1 = reg.exec(str) console.log(str1); </script></body></html>

有没有感觉上面的代码有点冗余,没错这里是可以通过循环来实现的

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title></head><body> <script> var str = '我叫{{name}}今年{{age}}岁了' var reg = /{{\s*([a-zA-Z]+)\s*}}/ var result = reg.exec(str) while (result) { str = str.replace(result[0], result[1]) result = reg.exec(str) } console.log(str); </script></body></html>

然后replace替换为真值,很简单很小的一个改动

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title></head><body> <script> var data = {name : '张三', age : 19} var str = '我叫{{name}}今年{{age}}岁了' var reg = /{{\s*([a-zA-Z]+)\s*}}/ var result = reg.exec(str) while (result) { str = str.replace(result[0], data[result[1]]) result = reg.exec(str) } console.log(str); </script></body></html>

ok这一系列结束过后我们自己就可以来定义一个简易版的模板引擎,把刚才说的正则字符串与模板引擎的规则结合起来

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script src="./template.js"></script></head><body> <div class="box"></div> <!-- 1.定义模板结构 --> <script type="text/html" id="model"> <div>姓名:{{name}}</div> <div>年龄:{{ age }}</div> <div>性别:{{ gender}}</div> <div>住址:{{address }}</div> </script> <!-- 2.预调用模板引擎 --> <script> // 3.模板引擎函数 // 2.1定义数据 var data = { name : '张三', age : 14, gender : '男', address : '重庆市江北区' } // 2.2调用 var strModel = template('model', data) console.log(strModel); // 2.3渲染 document.querySelector('.box').innerHTML = strModel </script></body></html>
本文链接地址:https://www.jiuchutong.com/zhishi/311726.html 转载请保留说明!

上一篇:ant-design-vue导航菜单a-menu的使用解读(vue导航方式)

下一篇:phpcms后台如何修改(phpcms怎么修改模板风格)

  • oppo手势拍照在哪里设置(oppo手机手势拍照)

    oppo手势拍照在哪里设置(oppo手机手势拍照)

  • 真我gtneo2t中框材质(realme真我gt中框)

    真我gtneo2t中框材质(realme真我gt中框)

  • 快手不能提现怎么回事(快手提现不出来怎么办)

    快手不能提现怎么回事(快手提现不出来怎么办)

  • 四个摄像头的手机有哪些(四个摄像头的手机华为)

    四个摄像头的手机有哪些(四个摄像头的手机华为)

  • 京东上怎么使用杉德卡(中欣金卡在京东上怎么使用)

    京东上怎么使用杉德卡(中欣金卡在京东上怎么使用)

  • iqoo的ai键有什么用(iqooz1ai按键是什么)

    iqoo的ai键有什么用(iqooz1ai按键是什么)

  • 为什么京东读书vip不免费(为什么京东读书小说不更新了)

    为什么京东读书vip不免费(为什么京东读书小说不更新了)

  • tny-al00华为什么型号(tny-al00华为什么型号拆机)

    tny-al00华为什么型号(tny-al00华为什么型号拆机)

  • 12340电话能打回去吗(12340会重打吗)

    12340电话能打回去吗(12340会重打吗)

  • 微信在另一个手机登录后重新登录要密码吗(微信在另一个手机上登录)

    微信在另一个手机登录后重新登录要密码吗(微信在另一个手机上登录)

  • 抖音撤回消息怎么删除(抖音撤回消息怎么能看到)

    抖音撤回消息怎么删除(抖音撤回消息怎么能看到)

  • 手机号码空号了,交话费可以激活吗(手机号码空号了微信密码忘了怎么找回)

    手机号码空号了,交话费可以激活吗(手机号码空号了微信密码忘了怎么找回)

  • 嘀嗒出行要先付款吗(嘀嗒出行要先付款后交钱吗)

    嘀嗒出行要先付款吗(嘀嗒出行要先付款后交钱吗)

  • 优酷快进有震动怎么取消(手机优酷画面快进声音正常)

    优酷快进有震动怎么取消(手机优酷画面快进声音正常)

  • 手机装卡的地方打不开(手机装卡的地方怎么打开?)

    手机装卡的地方打不开(手机装卡的地方怎么打开?)

  • word文档误删怎么恢复(word文档误删除)

    word文档误删怎么恢复(word文档误删除)

  • pr可以导入什么格式的视频(pr可以导入什么格式的文件)

    pr可以导入什么格式的视频(pr可以导入什么格式的文件)

  • 内存卡v10是什么意思(内存卡上的v10和v30都什么意思)

    内存卡v10是什么意思(内存卡上的v10和v30都什么意思)

  • iphonex什么时候上市的(iphoneX什么时候生产)

    iphonex什么时候上市的(iphoneX什么时候生产)

  • 阿里运费模板怎么设置(阿里运费模板怎么删除)

    阿里运费模板怎么设置(阿里运费模板怎么删除)

  • word中怎么设置参考文献(word中怎么设置首字下沉)

    word中怎么设置参考文献(word中怎么设置首字下沉)

  • 网络语言的好处(网络语言的好处5条)

    网络语言的好处(网络语言的好处5条)

  • 小米mix3能用36w快充吗(小米mix3能用6a数据线吗)

    小米mix3能用36w快充吗(小米mix3能用6a数据线吗)

  • 手机qq云端聊天记录在哪里能找到(手机qq云端聊天记录删除了怎么恢复)

    手机qq云端聊天记录在哪里能找到(手机qq云端聊天记录删除了怎么恢复)

  • pcie和nvme哪个更快(pcie和nvme的区别)

    pcie和nvme哪个更快(pcie和nvme的区别)

  • 数据对比分析表怎么做(数据对比分析表怎么做PPT)

    数据对比分析表怎么做(数据对比分析表怎么做PPT)

  • 苹果备忘录文件夹在哪(苹果备忘录文件怎么导出来)

    苹果备忘录文件夹在哪(苹果备忘录文件怎么导出来)

  • yolov5加入CBAM,SE,CA,ECA注意力机制,纯代码(22.3.1还更新)(yolov5加入注意力机制后网络后进行剪枝)

    yolov5加入CBAM,SE,CA,ECA注意力机制,纯代码(22.3.1还更新)(yolov5加入注意力机制后网络后进行剪枝)

  • 企业租车能抵增值税吗
  • 北京外贸进出口公司
  • 城镇土地使用税纳税义务发生时间
  • 预算资产负债表
  • 工程 开办费
  • 定额发票可以用旧的营业执照发票章吗
  • 红字发票怎么回事
  • 一般纳税人要做价税分离吗
  • 收客户款现金折让发票怎么处理
  • 以前年度做的预算怎么查
  • 企业股权无偿划转是否征税
  • 机构信用代码证是三证合一里的吗
  • 小规模纳税人酒水税率
  • 开票资料没有电话号码可以写法人名字吗
  • 转账支票可不可以挂失止付
  • 税控盘第一次使用
  • 生产性生物资产包括哪些
  • 餐饮服务行业会计分析
  • 公允价值变动损益借贷方向
  • 发工资一定要交税吗
  • 公司总经理报销找谁签字
  • 支付的测试流程
  • PACKAGER.EXE - PACKAGER是什么进程 有什么用
  • 购货返利怎么做账
  • ps工具栏失灵
  • 油气勘探支出包含哪些
  • 自建办公楼装修效果图
  • php zmq
  • 人工智能讲解
  • 出售债券税费处理会计分录怎么写
  • 盒子模型的概念
  • 命令行窗口
  • 什么是死锁,死锁的四个必要条件
  • python中的元组
  • 预付账款和挂账的区别
  • 发票超额怎么办
  • 个人股权转让需要评估吗
  • 企业的留存收益有
  • sqlserver2005导出数据
  • sql文件压缩
  • 运输服务属于生活服务吗
  • 税务局核定税种需要多久
  • 政府补助如何会计核算
  • 提前报废固定资产需要补提折旧
  • 什么是委托加工原材料
  • 小规模纳税人减按1%账务处理
  • 广告公司没有广告合法吗
  • 红字申请单能作废吗
  • 银行手续费没有发票
  • 商业承兑过期后可以退回吗
  • 主营业务税金及附加借贷方向
  • 行政单位经费支出审批权限
  • 账簿设置方法
  • windows自带的几个软件
  • qq windows
  • 预览版win10
  • xp如何查看系统位数
  • 修改注册表解决画面撕裂
  • mssqlserver安装
  • 电脑设置光盘启动方法
  • win7玩游戏卡吗
  • ubuntu安装sz
  • 如何解决电脑wifi无法上网
  • win10 win7控制面板
  • mac将多张图片保存到相册
  • win7系统关闭自动休眠
  • win7系统运行卡怎么办
  • win7系统教程
  • linux block io
  • Android OpenGL ES(七)----理解纹理与纹理过滤
  • cocoscreator lua
  • opengl绘制坐标轴
  • js创建元素
  • shell中的-le
  • 税务稽查条例操作规程
  • 江苏省定额规则
  • 加拿大的环保
  • 高新区地税办税服务厅
  • 股权转让和大宗转让区别
  • 国际贸易争端的形式
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设