传统网站中存在的问题 1网速慢的情况下,页面加载时间长,用户只能等待
ajax? 概述:他是浏览器提供的一套方法,可以实现页面刷新更新数据,提高用户浏览器应用的体验
缺点:没有浏览历史,不能后退 存在跨域问题 SEO不友好
ajax 应用场景
1 页面上拉加载,更多的数据 2 列表数据无刷新分页 3 表单离开焦点数据验证 4 搜索框 提示文字下拉列表 ?
ajax 的运行环境 ajax技术需要运行在网站环境中才能生效
ajax实现步骤
????????//1?创建对象
????????//2?初始化,设置请求方法和??url
????????//3?发送?
????????//4?事件绑定?处理服务器端返回的结果
?
express安装和基本使用
?
?
?1 使用
express? 右键文件选择集成中端打开,打开写有express的js文件
?
? 2 ajax的请求类型方法? get? post? all?
//1引入express
const express = require('express');
//2创建应用对象
const app = express();
//3创建路由规则
//request 是对请求报文的封装
//response 是对响应报文的封装
//get
app.get('/server',(request,response) =>{
//设置响应头 这是允许跨域
response.setHeader('Access-Control-Allow-Origin','*');
//设置响应体
response.send('Hello AJAX GET')
});
//post
app.post('/server',(request,response) =>{
response.setHeader('Access-Control-Allow-Origin','*');
response.send('Hello AJAX POST')
});
//all all可以接受任意类型请求
app.all('/server',(request,response) =>{
response.setHeader('Access-Control-Allow-Origin','*');
//响应头,设置什么类型的响应头都能接受到
response.setHeader('Access-Control-Allow-Headers','*');
response.send('Hello AJAX POST')
});
//json数据处理
app.all('/json-server',(request,response) =>{
response.setHeader('Access-Control-Allow-Origin','*');
//响应头,设置什么类型的响应头都能接受到
response.setHeader('Access-Control-Allow-Headers','*');
//响应一个数据
const data = {
name:'牛虎'
}
//数据进行转换 send(字符串)
let str = JSON.stringify(data);
//响应体
response.send(str);
});
//4监听端口启动服务
app.listen(8000,()=>{
console.log("服务器已启动,8000端口监听中....");
})
2.1 get请求
<body>
<button class="btn">点击发送get请求</button>
<textarea name="" id="text" cols="30" rows="10"></textarea>
<script>
//获取button按键
const btn = document.querySelector('.btn');
//获取文本框
const te = document.querySelector('#text');
//绑定点击事件
btn.addEventListener('click',function(){
//1 创建对象
const xhr = new XMLHttpRequest();
//2 初始化,设置请求方法和 url
xhr.open('GET','http://127.0.0.1:8000/server?a=100&b=200&c=300');
//3 发送
xhr.send();
//4 事件绑定 处理服务器端返回的结果
/*
on when 当。。。。。的是时候
readystate 是xhr 对象中的属性,表示状态 0 1 2 3(返回部分结果) 4(服务端返回所有的结果)
change 改变
*/
xhr.onreadystatechange = function(){
//判断(服务器端返回了 所有的结果)
if(xhr.readyState ===4){
//判断状态码 200 404 403 401 500
//响应状态码 2** 2开头的都是代表成功的
if(xhr.status >= 200 && xhr.status < 300){
//处理结果 行 头 空行 体
//1 响应行
console.log(xhr.status);//状态码
console.log(xhr.statusText);//状态字符串
console.log(xhr.getAllResponseHeaders());//所有响应头
console.log(xhr.response);//响应体
te.innerHTML = xhr.response;
}
}
}
});
</script>
</body>
2.2post请求 ?
<body>
???<textarea?name=""?id="text"?cols="30"?rows="10"></textarea>
???<script>
???????const?test?=?document.querySelector('#text');
????
????????test.addEventListener('mouseover',function(){
????????//1?创建对象
???????const?xhr?=?new?XMLHttpRequest();
????????//2?初始化,设置请求方法和??url
????????xhr.open('POST',"http://127.0.0.1:8000/server");
????????//设置请求头,固定写法??content-type设置请求体内容类型????application/x-www-form-urlencoded参数查询字符串类型
????????xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
????????//3?发送?
????????//xhr.send()
????????xhr.send('2133132156123niuhu');//设置请求体213313256123niuhu
????????//4?事件绑定?处理服务器端返回的结果
????????xhr.onreadystatechange?=?function(){
????????????if(xhr.readyState?===?4){
????????????????if(xhr.status?>=200?&&?xhr.status?<?300){
????????????????????test.innerHTML?=?xhr.response;
????????????????}
????????????}
????????}
????????});
???</script>
</body>
2.3 all(可以接受所有类型)请求
<body>
???<textarea?name=""?id="text"?cols="30"?rows="10"></textarea>
???<script>
???????const?test?=?document.querySelector('#text');
????
????????test.addEventListener('mouseover',function(){
????????//1?创建对象
???????const?xhr?=?new?XMLHttpRequest();
????????//2?初始化,设置请求方法和??url
????????xhr.open('POST',"http://127.0.0.1:8000/server");
????????//设置请求头,固定写法??content-type设置请求体内容类型????application/x-www-form-urlencoded参数查询字符串类型?
????????xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
??????????//自定义响应头类型,值,同时要在server.js设置?????????//响应头,设置什么类型的响应头都能接受到?response.setHeader('Access-Control-Allow-Headers','*');
????????xhr.setRequestHeader('name','niuhu')
???
????????//3?发送?
????????//xhr.send()
????????xhr.send('2133132156123niuhu');//设置请求体213313256123niuhu
????????//4?事件绑定?处理服务器端返回的结果
????????xhr.onreadystatechange?=?function(){
????????????if(xhr.readyState?===?4){
????????????????if(xhr.status?>=200?&&?xhr.status?<?300){
????????????????????test.innerHTML?=?xhr.response;
????????????????}
????????????}
????????}
????????});
???</script>
</body>
?
2.4 json数据转换??
<body>
????<textarea?name=""?class="text"?cols="30"?rows="10"></textarea>
????<button?class="button">点击获取json</button>
????<script>
????????const?text?=?document.querySelector(".text");
????????const?btn?=?document.querySelector(".button")
????????text.addEventListener("keydown",function(){
????????????const?xhr?=?new?XMLHttpRequest();
????????????xhr.responseType?=?'json';
????????????xhr.open("GET","http://127.0.0.1:8000/json-server");
????????????xhr.send();
????????????xhr.onreadystatechange?=?function(){
????????????????if(xhr.readyState?===?4){
????????????????????if(xhr.status?>=200?&&?xhr.status?<?300){
????????????????????????text.innerHTML?=?xhr.response.name;
????????????????????}
????????????????}
????????????}
????????})
????</script>
</body>
?针对ie缓存机制 ajax解决方案,加一个参数 “+Date.now()” 刷新会按照当前的时间来更新
?
|