Ajax基础

一、Ajax基础

(一) 服务器的基本概念与初识Ajax

1、客户端与服务器

​ a 服务器:负责存放和对外提供资源的电脑。

​ b 客户端:负责获取和消费资源的电脑。

2、URL地址的概念

​ a URL叫统一资源定位符。

​ b URL组成:

​ 客户端与服务器之间的通信协议。

​ 存有该资源的服务器名称。

​ 资源在服务器上具体的存放位置

1662427834006

​ c 网页打开过程:请求-处理-响应

​ d 数据即资源

3、资源的请求方式

​ a get请求:通常用于获取服务端资源。

​ b post请求:通常用于向服务端提交资源。

​ 所有的Ajax请求都可以在浏览器的Network的XHR中查看。

4、了解Ajax

​ a Ajax即异步的JavaScript和XML

5、jQuery中的Ajax

​ a 浏览器中提供的XMLHttpRequest用法比较复杂,jQuery对XMLHttpRequest进行了封装。

​ b jQuery中发起Ajax请求的三种方法:

​ $.get():

​ $.get(url,[data],[callback])

1662428380525

​ 不带参:

​ $.get('http://www.baidu.com',function(res){

​ console.log(res)//res是服务器端返回的数据

​ })

​ 带参:

​ $.get("http://www.baidu.com",{id:1},function(res){

​ console.log(res)

​ })

​ $.post():

​ $.post(url,[data],[callback])

1662428610385

​ 提交数据:

​ $.post(

​ 'http://www.baidu.com',

​ {

​ bookname:'水浒传',

​ author:'小梦'

​ },

​ function(res) {

​ console.log(res)

​ }

​ )

​ $.ajax():

​ $.ajax({

​ type:'', // 请求方式

​ url:'', //请求路径

​ data:{}, //请求要带的数据

​ success:function(res){} //回调函数

​ })

1662428886796

1662428909968

6、接口

​ a 基本介绍:使用Ajax请求数据时,被请求的URL地址,就叫做数据接口(简称接口),每个接口必须有请求方式。

​ b 接口测试工具:PostMan:https://www.getpostman.com/downloads

​ c 接口文档:接口的说明文档。

1662429176882

1662429196524

(二) form表单与模板引擎

1、form表单基本使用

​ a 表单的目的是用于用户数据的采集

​ b < form>标签的属性:

1662429411127

​ c 在涉及文件上传时,必须将enctype的值设为:multipart/form-data;不涉及文件上传,值为:application/x-www-form-urlencoded.

​ d 表单同步提交:通过submit按钮提交表单,从而使页面跳转到action URL的行为。

​ e 表单同步提交的缺点:整个页面进行跳转;页面之前的状态和数据会丢失。(解决方案:表单只负责采集数据,Ajax负责将数据提交到服务器)

2、通过Ajax提交表单数据

​ a 监听表单提交事件:(jQuery的两种方式)

​ $('#form1').submit(function(e){

​ alert('监听了表单的提交事件')

​ })

​ $('#form2').on('submit', function(e){

​ alert('监听了表单的提交事件')

​ })

​ b 阻止表单默认提交行为:

​ $('#form1').submit(function(e){

​ e.preventDefault()

​ })

​ $('#form1').on('submit',function(e){

​ e.preventDefault()

​ })

​ c 快速获取表单中的数据:

​ $(selector).serialize():一次性获取表单的所有数据。(必须为每一个表单元素添加name属性)

​ < form id='form1'>

​ < input type="text" name="username">

​ < input type="password" name="password">

​ < button type="submit">提交< /button>

​ < /form>

​ $('#form1').serialize()

3、模板引擎的基本概念

​ a 模板引擎指,它可以根据指定的模板结构和数据,自动生成一个完整的HTML页面

​ b 模板引擎的优点:减少了字符串的拼接操作;使代码结构更清晰;使代码更易于阅读与维护

4、art-template模板引擎

​ a 下载:http://aui.github.io/art-template/zh-cn/index.html

​ b 基本使用:导入art-template---定义数据---定义模板---调用template函数---渲染HTML结构

​ c 标准语法-输出:

​ {{value}}

​ {{obj.key}}

​ {{obj['key']}}

​ {{a?b:c}}

​ {{a||b}}

​ {{a+b}}

​ d 标准语法-原文输出:如果要输出的value值中,包含了HTML标签结构,则需要使用原文输出,才能保证HTML标签被正常渲染。

​ {{@ value}}

​ e 标准语法-条件输出:

​ {{if value}}按需输出内容{{/if}}

​ {{if v1}}按需输出内容 {{else if v2}}按需 输出内容 {{/if}}

​ f 标准语法-循环输出

​ {{each arr}}

​ {{$index}} {{$value}}

​ {{/each}}

​ g 标准语法-过滤器(管道操作符,即上一个输出作为下一个)

​ 使用过滤器:{{value | filterName}}

​ 定义过滤器:template.defaults.imports.filterName= function(value){}

<!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>
    <!-- 1、引入template模拟 -->
    <script src="./lib/template-web.js"></script>
    <script src="./lib/jquery.js"></script>
</head>
<body>
    <!-- 3、定义模板 -->
    <script type="text/html" id="tpl">
        <h1>输出{{name}}---------{{age}}</h1>
        原文输出{{@ test}}
        <div>
            判断语句输出
            {{if flag===0}}
            flag的值为0
            {{else if flag===1}}
            flag的值为1
            {{/if}}
        </div>
        <ul>
            数组循环输出
            {{each hobby}}
               <li>索引是:{{$index}}</li>
               <li>循环项是:{{$value}}</li>
            {{/each}}
        </ul>
        <div>
            注册时间:{{regTime | dateFormat}}
        </div>
    </script>
    <script type="text/javascript">
        //定义过滤器
        template.defaults.imports.dateFormat = function (date) {
            var y = date.getFullYear()
            var m = date.getMonth()+1
            var d = date.getDate()
            return y + '-' + m + '-' + d
        }
        //2、定义渲染的数据
        var data = {name:'zs',age:20,test:'<h3>测试</h3>',flag:1,hobby:['吃饭','睡觉'],regTime:new Date()}
        //4、调用template()方法
        let strHtml = template('tpl',data)
        //5、选软HTML结构
        $('body').html(strHtml)
    </script>
</body>
</html>

5、模板引擎的实现原理

​ a 正则与字符串操作:

​ exec():检索字符串中的正则表达式的匹配;如果字符串中有匹配的值,则返回该匹配的值否则返回Null

​ RegExpObject.exec(string)

​ 实例:

​ var str = 'hello'

​ var pattern = /o/

​ //输出的结果:["0",index:4,input:"hello",groups:undefined]

​ console.log(pattern.exec(str))

​ 分组:正则表达式中()括起来的内容表示一个分组,可以通过分组来提取自己需要的内容。

​ 实例:

​ var str = '< div>我是{{name}}</ div>'

​ var pattern = /{{([a-zA-Z]+)}}/

​ var patternResult = pattern.exec(str)

​ console.log(patternResult )

​ //得到name相关的分组信息

​ //["{{name}}","name",index:7,input:"< div>我是{{name}}</ div>",groups:underfined]

​ replace()函数:用于在字符串中用一些字符替换另一些字符

​ 实例:

​ var str = '< div>我是{{name}}</ div>'

​ var pattern = /{{([a-zA-Z]+)}}/

​ var patternResult = pattern.exec(str)

​ str = str.replace(patternResult [0],patternResult [1])//得到:< div>我是name</ div>

​ 多次replace操作:

1662707612657

1662707711537

1662707772661

6、实现简易的模板引擎

1662707867090

1662707880746

1662707924661

1662707982121

1662708018394

(三) Ajax 加强

1、XMLHttpRequest的基本使用

​ a XMLHttpRequest是浏览器提供的JavaScript对象,通过它,可以请求服务器上的数据资源。可以请求服务器上的数据资源。

2、使用xhr发起GET请求

​ a 步骤:创建xhr对象--调用xhr.open()函数--调用xhr.send()函数--监听xhr.onreadystatechange事件

​ var xhr = new XMLHttpRequest()

​ xhr.open('GET','http://www.baidu.com')

​ xhr.send()

​ xhr.onreadystatechange = function(){

​ if(xhr.readystate === 4 && xhr.status === 200){

​ console.log(xhr.responseText)

​ }

​ }

​ b xhr对象的readyState属性:

1662445732529

3、使用xhr发起带参的GET请求

​ xhr.open('GET','http://www.baidu.com?id=1')

1662445939353

4、URL编码与解码

​ a url编码的原则:使用安全的字符替代不安全的字符。

1662446078248

​ b 编码函数:encodeURL()

​ c 解码函数:decodeURL()

1662446175336

5、使用xhr发起POST请求

​ a 步骤:创建xhr对象---调用xhr.open()方法---设置Content-Type属性()---调用xhr.send()函数,同时指定要发送的数据----监听xhr.onreadystatechange事件

1662446394659

6、数据交换格式

​ a 前端常见的两种数据交换格式:XML和JSON

​ b XML可扩展标记语言

​ c JSON就是JavaScript对象和数组的字符串表示法

​ d JSON两种结构:对象和数组

​ 对象:对象结构在 JSON 中表示为 { } 括起来的内容。数据结构为 { key: value, key: value, … } 的键值对结构。其中,key 必须是使用英文的双引号包裹的字符串,value 的数据类型可以是数字、字符串、布尔值、null、数组、对象6种类型。

1662447595489

​ e JSON语法注意事项:

​ 属性名必须使用双引号包裹。

​ 字符串类型的值必须使用双引号包裹

​ JSON中不允许使用单引号表示字符串

​ JSON中不能写注释

​ JSON的外层必须是对象或数组格式

​ 不能使用undefined或函数作为JSON值

​ JSON的作用:在计算机与网络之间存储和传输数据

​ JSON的本质:用字符串来表示JavaScript对象数据或数组数据

​ f JSON和JS对象的关系:

​ JSON是JS对象的字符串表示。

​ //这是一个对象
​ var obj = {a: 'Hello', b: 'World'}
​ //这是一个 JSON 字符串,本质是一个字符串
​ var json = '{"a": "Hello", "b": "World"}'

7、JSON和JS对象的互换

​ a JSON转为JS对象:

​ var obj = JSON.parse('{"a":"hello","b":"world"}')//{a:'hello,b:world'}

​ b JS对象转为JSON:

​ var json = JSON.stringify({a:'hello,b:'world})//'{"a":"hello","b":"world"}'

8、序列化和反序列化

​ a 把数据对象转换为字符串的过程,叫做序列化,例如:调用 JSON.stringify() 函数的操作,叫做 JSON 序列化。
​ b 把字符串转换为数据对象的过程,叫做反序列化,例如:调用 JSON.parse() 函数的操作,叫做 JSON 反序列化。

9、封装自己的Ajax函数

1662448977150

10、XMLHttpRequest Level2新特性

​ a 设置HTTP请求时限:

​ xhr.timeout = 3000或

​ xhr.ontimeout = function(event){
​ alert('请求超时!')
​ }

​ b FormData对象管理表单数据:

​ // 获取表单元素
var form = document.querySelector('#form1')
// 监听表单元素的 submit 事件
​ form.addEventListener('submit', function(e) {
e.preventDefault()
​ // 根据 form 表单创建 FormData 对象,会自动将表单数据填充到 FormData 对象中
​ var fd = new FormData(form)
​ var xhr = new XMLHttpRequest()
​ xhr.open('POST', 'http://www.liulongbin.top:3006/api/formdata')
​ xhr.send(fd)
​ xhr.onreadystatechange = function() {}
​ })

​ c

posted @   秋风里的蜜  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
  1. 1 在你的身边 盛哲
  2. 2 世间美好与你环环相扣 柏松
  3. 3 起风了 吴青峰
  4. 4 极恶都市 夏日入侵企划
在你的身边 - 盛哲
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.
点击右上角即可分享
微信分享提示