都是用来在Web应用程序中维持用户状态的方式,使得服务器可以识别和区分不同的用户。
Cookie和Session机制在Web开发中经常被同时使用,Cookie通常用于存储少量的用户信息或标识,而Session则用于存储更多的用户状态信息。它们都是为了实现用户认证、保持用户登录状态、跟踪用户行为等功能而设计的。
常见的Content-Type值包括:
通过Content-Type字段,服务器可以正确解析请求的数据格式,客户端也可以正确解析服务器返回的数据格式,确保数据能够被正确处理和显示。
在发送POST请求时,通常需要设置Content-Type字段来指定请求主体的数据格式,以便服务器正确解析数据。在处理响应时,客户端也会根据响应头中的Content-Type字段来正确解析服务器返回的数据格式。
//获取button元素
const btn = document.getElementByTagName('button')[0]
//绑定事件
btn.onclick = function(){
1.创建对象
const xhr = new XMLHttpRequest()
(1)设置响应体类型
xhr.responseType = 'json'
2.初始化,设置请求的方法和url
xhr.open('GET','http://127.0.0.1:8000/server')
(1)若是get请求,通过如下传递参数
'http://127.0.0.1:8000/server?a=100&b=200&c=300'
(2)设置请求头
xhr.setRequestHeader(头名,头值)
eg.xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded') //详细介绍见下面
3.发送
xhr.send()
若是post请求,通过如下传递参数
xhr.send(a=100&b=200&c=300) //这里请求体格式很灵活。看后端怎么处理
4.事件绑定,处理服务端返回的结果
on : when 当...时候
readystate:是xhr对象中的属性,表示状态0 1 2 3 4
0:未初始化,最开始状态
1:open调用完毕
2:send调用完毕
3:服务端返回部分结果
4:服务端返回所有结果
change:改变的时候触发,因此会触发四次
xhr.onreadystatechange = function(){
//判断
if(xhr.readystate == 4){ //返回所有结果
//判断响应状态码,状态码2开头都表示成功,2xx
if(xhr.status>=200 && xhr.status<300){
//处理结果 行 头 空行 体
1.响应行:
xhr.status保存响应行
xhr.statusText保存响应的状态字符串 OK等
xhr.getAllResponseHeaders()保存所有响应头
xhr.response保存响应体(内容)
2.处理返回的JSON文件
//手动转换
let data = JSON.parse(xhr.response)
//自动转换,在xhr.open前面设置响应体类型
}
}
}
}
IE浏览器会对AJAX的请求结果进行缓存,若频繁发送,浏览器会认为你与之前发送的请求是一致的,则下一次从本地缓存中拿数据,返回结果就不是新数据,如果那一段事件发送请求的数据改变了,则缓存的数据就不是请求的数据,会出现问题
btn.onclick = function(){
const xhr = new XMLHttpRequest()
//解决IE缓存问题,每次发送的请求随事件改变,则浏览器认为前后的请求是不一样的,就不会从缓存拿数据
xhr.open('GET','http://127.0.0.1:8000?t='+Date.now)
xhr.send()
xhr.onreadystatechange = function(){
if(xhr.readystate == 4){
if(xhr.status>=200 && xhr.status<300){
}
}
}
}
btn.onclick = function(){
const xhr = new XMLHttpRequest()
//超时设置2s
xhr.timeout = 2000s
//超时回调,出问题之后取消请求
xhr.onetimeout = function(){
alert('网络异常,请稍后重试')
}
//网络异常,出问题之后取消请求
xhr.onerror= function(){
alert('你的网络似乎出了问题')
}
xhr.open('GET','http://127.0.0.1:8000?t='+Date.now)
xhr.send()
}
xhr.absort() //取消请求
let flag = false //是否正在发送请求
const xhr = null
btn.onclick = function(){
if(flag) xhr.absort //如果正在发送,则取消该请求,创建一个新的请求
xhr = new XMLHttpRequest()
flag=true
xhr.open('GET','http://127.0.0.1:8000?t='+Date.now)
xhr.send()
xhr.onreadystatechange = function(){
if(xhr.readystate == 4){
//修改标识变量
flag = false
}
}
}
axios.default.baseURL = 'http://127.0.0.1:8000'
btn.onclick = function(){
axios.get('/server',{ //利用baseURL对路径进行简化
//url参数
params:{
id:12345
},
//请求头信息
headers:{
'Content-type':'application/x-www-form-urlencoded'
},
}).then(value=>{
//value存储各种信息
})
axios.post('/server',{ //第二个参数作为请求体
username:'admin'
},{ //利用baseURL对路径进行简化
//url参数
params:{
id:12345
},
//请求头信息
headers:{
'Content-type':'application/x-www-form-urlencoded'
}
}).then(value=>{
})
}
btn.onclick = function(){
axios({
//请求方法
method:"POST",
//url
url:'/server',
/url参数
params:{
id:12345
},
//请求头信息
headers:{
'Content-type':'application/x-www-form-urlencoded'
},
//请求体
data:{
username:"1"
}
}).then(response=>{
//response存储返回信息
})
}
fetch()函数是全局对象,直接调用,返回promise对象
btn.onclick = function(){
fetch('/server?age=18',{
//请求方法
method:"POST",
//请求头信息
headers:{
'Content-type':'application/x-www-form-urlencoded'
},
//请求体
body:{
username:"1"
}
}).then(response=>{
return response.text()
}).then((response)=>{ //需要两层then
})
}
btn.onclick = function(){
const xhr = new XMLHttpRequest()
xhr.open('GET','./server') //满足同源策略,url可以简写
xhr.send()
}
//设置响应头,设置允许跨域
//*表示所有的网页都允许,也可以设置其他url
response.setHeader('Access-Control-Allow-Origin',"*")
}