ajax入门

ajax 用于浏览器和服务器之间通信,动态数据交互
url统一资源定位符
url的构成:协议 http  域名 baidu.com 资源路径/ss/ss
http协议 :超文本传输协议 规定浏览器和服务器之间传输数据的格式
域名:标记服务器在互联网中方位 必须的
url 查询参数
定义:浏览器提供给服务器的额外信息,让服务器返回浏览器想要的数据
语法:http://xx.com/xx/x?参数名1=值1&参数名2=值2

常用的请求方法
对服务器资源,要执行的操作
GET:获取数据
POST:提交数据
PUT:修改数据(全部)
DELETE:删除数据
PATCH:修改数据(部分)

axios请求配置
url 请求的url网址
method:请求的方法 get 可以省略(不区分大小写)
data:提交数据

http协议 请求报文
http协议:规定了浏览器发送及服务器返回内容的格式
请求行:请求方法,url,协议
请求体:发送的资源
响应报文
响应体:返回的资源

http响应状态码
用来表明请求是否成功完成
1xx 信息
2xx 成功
3xx 重定向消息
4xx 客户端错误
5xx 服务端错误

form-serialize中
hash为true 提交js对象 false:字符串
empty true 获取空值 false 不获取空值

实际开发中 如果数据对象“属性”和标签“类名”一致
遍历数组对象,使用属性去获取对应的标签,快速赋值

定义: XMLHttpRequest(XHR)对象用于与服务器交互。通过XMLHttpRequest可以在不刷新页面的情况下请求特
定URL,获取数据。这允许网页在不影响用户操作的情况下,更新页面的局部内容。XMLHttpRequest在AJAX编程中被大量使用。
关系:axios 内部采用XMLHttpRequest与服务器交互

const xhr=new XMLHttpRequest()
xhr.open('请求方法','请求url网址')
xhr.addEventListener('loadend',()=>
{
    //响应结果,监听loaded事件
    console.log(xhr.response)
})
xhr.send()//发送请求

const paramsobj=new URLSearchParams({
    //参数名1:值1
    //参数名2:值2
})
const querySelector=paramsobj.toString()
//生产指定格式,结果:参数名1=值1&参数名2=值2

使用 JSON.parse() 方法将数据转换为 JavaScript 对象。

xhr.setRequestHeader('Content-Type','application')
//告诉服务器,传递的是json字符串

const user={
    username:'klk',
    password:'ssssss'
}
const userstr=JSON.stringify(user)
//将数据转成json字符串
xhr.send(userstr)

promise 对象用于表示一个异步操作的最终完成(或失败)及其结果值

const p=new Promise((resolve,reject)=>{
//执行异步任务-并传递结果
//成功调用:resolve(值)触发then()执行
//失败调用:reject(值) 触发catch()执行
})
p.then(result=>{
    //成功
}).catch(error=>{
    //失败
})

一个promise对象,必然处于以下几种状态之一
待定(pending):初始状态,既没有被兑现,也没有被拒绝
已兑现(fulfilled):操作成功完成
已拒绝(rejected):操作失败

promise对象一旦被兑现/拒绝就是已经敲定了,状态无法改变
//自制axios
function myAxios(config){
    return new Promise((resolve,reject)=>{
    })
}
myAxios({
    url:'地址',
    params:{
         //参数名1:值1
    //参数名2:值2
    }
}).then(result=>{
   
}).catch(error=>{
    
})


同步代码:逐行执行,需原地等待结果,才继续向下执行
异步代码:调用后耗时,不阻塞代码执行,在将来完成后触发一个回调函数
回调函数地狱
概念:在回调函数中嵌套回调函数,一直嵌套下去就形成了回调函数地狱
缺点:可读性差,异常无法捕获,耦合性严重
 promise-链式调用
 概念:依靠then()方法会返回一个新生成的promise对象特性,继续串联下一环任务,直到结束
 细节:then()回调函数中的返回值,会影响生成的promise对象最终状态和结果
 好处:可以解决回调函数嵌套问题

 async函数和await
 定义:async函数使用async关键字声明的函数,async函数是AsyncFunction构造函数的实例,并且其中允许使用Await关键字。async和await关键字让我们可以使用一种更简洁的方式写出基于Promise的异步行为,而无需刻意地链式调用Promise

 try{
    //要执行的代码
 }catch{
    //error接收的是,错误信息
    //try里代码,如果有错误,直接进入这里执行
 }

 事件循环(EventLoop)
 概念:js有一个基于事件循环的并发模型,事件循环负责执行代码,收集和处理事情以及执行队列中的子任务。这个模型与其他语言中的模型截然不同·
 js单线程,为了让耗时代码不阻塞其他代码运行,设计了事件循环模型

 宏任务和微任务
 异步任务分:
 宏任务:由浏览器环境执行的异步代码(js脚本执行事件,setTimeout/setlnterval,ajax请求完成事件,用户交互事件)
 微任务:由js引擎环境执行的异步代码(Promise对象.then())
若调用栈空闲时会先调用微任务,然后宏任务

Promise.all静态方法
概念:合并多个promise对象,等待所有同时成功完成(或某一个失败),做后续逻辑
const p=Promise.all([Promise对象,promise对象])
p.then(result=>{
//result结果:[promise对象成功结果,Promise对象成功结果]
}).catch(error=>{
    //第一个失败的Promise对象,抛出的异常
})

axios请求拦截器:发送请求之前,触发的配置函数,对请求参数进行额外配置
axios响应拦截器:响应回到then/catch之前,触发的拦截函数,对响应结果统一处理


document.querySelector('.btn').addEventListener('click',()=>{
    let time_stamp=Date.parse(new Date())
    let email='3087342423@qq.com'
    let checkType='2'
     let s=email+'we are winner'+checkType+'we are winner'+time_stamp
    let token=hex_md5(s)
    axios(
        {
            url:'http://my.yuanerya.top:9898/yuaner_community/api/sentEmailCode',
            method:'POST',
            params:{
                email,
                checkType,
                token,
                time_stamp
            }
        }).then(result =>{
            console.log(result)
        }).catch(error=>{
            // alert(error.message)
        })
        
})

//上传图片
document.querySelector('img').addEventListener('change',e=>
{
    //使用formData 携带图片文件
    const fd =new FormData()
    fd.append('img',e.target.files[0])
    axios(
        {
            url:'http://my.yuanerya.top:9898/yuaner_community/api/sentEmailCode',
            method:'POST',
           data:fd
        }).then(result =>{
            console.log(result)
            //返回服务器上的图片地址
            const imgUrl=result.data.data.url
            document.querySelector('.my-img').src=imgUrl
        }).catch(error=>{
            // alert(error.message)
        })
})

const xhr=new XMLHttpRequest()
xhr.open('请求方法','请求url网址')
xhr.addEventListener('loadend',()=>
{
    //响应结果,监听loaded事件
    console.log(xhr.response)
})
xhr.send()//发送请求

const paramsobj=new URLSearchParams({
    //参数名1:值1
    //参数名2:值2
})
const querySelector=paramsobj.toString()
//生产指定格式,结果:参数名1=值1&参数名2=值2

xhr.setRequestHeader('Content-Type','application')
//告诉服务器,传递的是json字符串

const user={
    username:'klk',
    password:'ssssss'
}
const userstr=JSON.stringify(user)
//将数据转成json字符串
xhr.send(userstr)

const p=new Promise((resolve,reject)=>{
//执行异步任务-并传递结果
//成功调用:resolve(值)触发then()执行
//失败调用:reject(值) 触发catch()执行
})
p.then(result=>{
    //成功
}).catch(error=>{
    //失败
})
//自制axios
function myAxios(config){
    return new Promise((resolve,reject)=>{
    })
}
myAxios({
    url:'地址',
    params:{
         //参数名1:值1
    //参数名2:值2
    }
}).then(result=>{
   console.log(result)
}).catch(error=>{
    console.dir(error)
})



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白潏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值