目录
给AJAX设置请求参数
设置请求头信息
AJAX-服务器响应JSON数据
1-AJAX请求的基本操作
1.要引入express框架
2.对其基本设置
//1.引入express
const express = require('express');
//2.创建应用对象
const app = express();
//3.创建路由规则
//request 是对请求报文的封装
//response 是对响应报文的封装
app.get('/server', (request, response) => {
//设置响应头 设置允许跨域
response.setHeader('Access-Control-Allow-Origin','*');
//设置响应体
response.send("HELLO AJAX");
});
//4.监听端口启动服务
app.listen(8111, () => {
console.log("服务已经启动,8111端口监听中....")
})
3.在进行数据的AJAX操作
<body>
<button id="btnn">点击发送按钮</button>
<div id="result"></div>
<script>
//获取button元素
const btn = document.getElementById("btnn");
const result = document.getElementById("result");
//绑定事件
btn.onclick = function(){
//1.创建对象
const xhr = new XMLHttpRequest;
//2.初始化 设置请求方法 和 url
xhr.open('GET','http://127.0.0.1:8111/server');
//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
//2xx 表示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);//响应体
//设置 result 的文本
result.innerHTML = xhr.response;
}else{
}
}
}
}
</script>
</body>
给AJAX GET请求设置请求参数
xhr.open('GET','http://127.0.0.1:8111/server?a=100&b=200&c=300');
AJAX发送POST请求
<div id="result"></div>
<script>
//获取元素对象
const result = document.getElementById("result");
//绑定事件
result.addEventListener("mouseover",function(){
//1.创建对象
const xhr = new XMLHttpRequest();
//2.初始化 设置类型与 URL
xhr.open('POST','http://127.0.0.1:8111/server');
//3.发送
xhr.send();
//4.事件绑定
xhr.onreadystatechange = function(){
//判断
if(xhr.readyState == 4){
if(xhr.status >= 200 && xhr.status < 300){
//处理服务端返回的结果
result.innerHTML = xhr.response;
}
}
}
})
</script>
app.get('/server', (request, response) => {
//设置响应头 设置允许跨域
response.setHeader('Access-Control-Allow-Origin','*');
//设置响应体
response.send("HELLO AJAX");
});
app.post('/server', (request, response) => {
//设置响应头 设置允许跨域
response.setHeader('Access-Control-Allow-Origin','*');
//设置响应体
response.send("HELLO AJAX POST");
});
给POST请求设置参数
xhr.send('a=100&b=200&c=300');
xhr.send('a:100&b:200&c:300');
xhr.send('123345123')
设置请求头信息
//2.初始化 设置类型与 URL
xhr.open('POST','http://127.0.0.1:8111/server');
//设置请求头信息
//xhr.setRequestHeader('Content-Type','application/x-www-form-urlencode');
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencode');
//3.发送
//xhr.send();
AJAX-服务器响应JSON数据
app.all('/json-server', (request, response) => {
//设置响应头 设置允许跨域
response.setHeader('Access-Control-Allow-Origin','*');
//响应头
response.setHeader('Access-Control-Allow-Headers','*');
//响应一个数据
const data = {
name:'atguigu'
};
//对对象进行字符串转换
let str = JSON.stringify(data);
//设置响应体
response.send(str);
});
<div id="result"></div>
<script>
//绑定键盘按下事件
window.onkeydown = function(){
//new对象
const xhr = new XMLHttpRequest();
//初始化
xhr.open('GET','http://127.0.0.1:8111/json-server');
//发送
xhr.send();
//事件绑定
xhr.onreadystatechange = function(){
if(xhr.readyState === 4){
if(xhr.status >= 200 && xhr.status <300){
//
// console.log(xhr.response);
// result.innerHTML = xhr.response;
//手动对数据转换
let data = JSON.parse(xhr.response);
console.log(data)
result.innerHTML = data.name;
//自动对数据转换
// console.log(xhr.response);
// result.innerHTML = xhr.response.name;
}
}
}
}
</script>
nodemon自动重启插件安装
终端输入 npm install -g nodemon
IE缓存问题
btn.addEventListener('click',function(){
const xhr = new XMLHttpRequest();
xhr.open("GET",'HTTP:127.0.0.1:8111/ie?t='+ Date.now());
xhr.send();
xhr.onreadystatechange = function(){
if(xhr.readyState === 4){
if(xhr.status >= 200 && xhr.status < 300){
result.innerHTML = xhr.response;
}
}
}
})
//针对 IE 缓存
app.get('/ie', (request, response) => {
//设置响应头 设置允许跨域
response.setHeader('Access-Control-Allow-Origin', '*');
//设置响应体
response.send("HELLO ie 2");
})
AJAX请求超时与网络异常处理
//请求超时与网络异常处理 延时响应
app.get('/delay', (request, response) => {
//设置响应头 设置允许跨域
response.setHeader('Access-Control-Allow-Origin', '*');
setTimeout(()=>{
//设置响应体
response.send("延时响应");
},3000)
})
const xhr = new XMLHttpRequest();
//超时设置2s 设置
xhr.timeout = 2000;
//超时回调
xhr.ontimeout = function(){
alert("网络异常,请稍后再试!!")
}
//网络异常回调
xhr.onerror =function(){
alert("你的网络似乎出现一些问题!!")
}
AJAX - 取消请求
//获取元素对象
const btns = document.querySelectorAll('button');
let xhr = null;
btns[0].onclick = function(){
xhr = new XMLHttpRequest();
xhr.open("GET",'HTTP:127.0.0.1:8111/delay');
xhr.send();
}
//abort
btns[1].onclick = function(){
xhr.abort();
}
AJAX请求重复发送问题处理
//获取元素对象
const btns = document.querySelectorAll('button');
let xhr = null;
//标识变量
let isSending = false; //是否正在发送AJAX请求
btns[0].onclick = function(){
if(isSending) xhr.abort(); //如果正在发送请求,则取消改请求,创建一个新的请求
xhr = new XMLHttpRequest();
isSending = true;
xhr.open("GET",'HTTP:127.0.0.1:8111/delay');
xhr.send();
xhr.onreadystatechange = function(){
if(xhr.readyState === 4){
//修改标识变量
issending = false;
}
}
}
Jquery发送AJAX请求(3种)
<div>jQuery 发送 AJAX 请求</div>
<button>GET</button>
<button>POST</button>
<button>通用型方法</button>
<script>
$('button').eq(0).click(function(){
$.get('http://127.0.0.1:8111/jquery-server',{a:100,b:200}, function(data){
console.log(data);
},'json')
})
$('button').eq(1).click(function(){
$.post('http://127.0.0.1:8111/jquery-server',{a:100,b:200}, function(data){
console.log(data);
})
})
$('button').eq(2).click(function(){
$.ajax({
//url
url:'http://127.0.0.1:8111/jquery-server',
//参数
data:{a:100,b:200},
//请求参数
type:'GET',
//设置响应体结果
dataType:'json',
//成功的回调
success:function(data){
console.log(data);
},
//超时时间
timeout:2000,
//失败的回调
error:function(){
console.log('出错了!!');
},
//头信息
headers:{
c:200,
b:300
}
});
});
</script>
//jQuery 服务
app.all('/jquery-server', (request, response) => {
//设置响应头 设置允许跨域
response.setHeader('Access-Control-Allow-Origin', '*');
response.setHeader('Access-Control-Allow-Headers', '*');
//response.send('Hello jQuery AJAX');
const data = {name:'小孩子'};
//response.send('Hello jQuery AJAX');
response.send(JSON.stringify(data));
})