1. XML简介
XML是可扩展标记语言,被设计用来传输和存储数据,和HTML类似,不同的是XML没有与定义标签,全都是自定义标签,用来表示一些数据
例如:
name = “孙悟空”; age = 18; gender = “男”;
用XML表示
<student>
<name>孙悟空</name>
<age>18</age>
<gender>男</gender>
</student>
但现在已被JSON取代:
{ “name” :“孙悟空”; “age”:18; “gender” : “男”}
2.HTTP协议介绍
请求报文格式
重点是格式与参数
行 POST /s?ie=utf-8 HTTP/1.1
头 Host: atguigu.com
Cookie:name=guigu
Content-type: applicantion/x-www-form-urlencoded //告知服务器请求体是什么类型
User-Agent: chrome 83
空行
体 (GET的话请求体为空 POST的话请求体可以不为空)username=admin&password=admin
响应报文格式
行 HTTP/1.1 200 OK
头 Content-Type: text/html;charset=utf-8
Content-length:2048
Content-encoding:gzip//压缩方式
User-Agent: chrome 83
空行
体 <html>
<head>
</head>
<body>
</body>
<\html>
3.express安装
在管理员模式下打开VScode中资源管理器右键打开“在集成终端中打开”,输入命令npm init --yes
再输入 npm i express安装express
4.原生ajax案例
GET
//获取button元素
const btn = document.querySelector('button');
var result = document.querySelector('.result');
btn.onclick = 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:被初始化,最开始就是0 1:open方法已经调用完毕 2:send方法调用完毕 3:服务端返回了部分结果 4:服务端返回了所有结果
//change 改变的时候触发
xhr.onreadystatechange = function(){
//判断(服务端返回了所有的结果)
if(xhr.readyState == 4){
//判断响应状态码 200 404 403 401 500
//2开头表示成功
if(xhr.status >= 200 && xhr.status < 300){
//处理结果 行 头 空行 体
//1.响应行
// console.log(xhr.status);//状态码
// console.log(xhr.statusText);//响应状态字符串
// console.log(xhr.getAllResponseHeaders());//所有响应头
// conosle.log(xhr.response);//响应体
result.innerHTML = xhr.response;
}else{
}
}
}
}
POST
const result = document.querySelector('.result');
result.addEventListener('mouseover', function(){
//创建对象
const xhr = new XMLHttpRequest();
//2.初始化 设置类型与URL
xhr.open('POST', 'http://127.0.0.1:8000/server');
//3.发送
xhr.send('a=100&b=200&c=300');
xhr.onreadystatechange = function(){
//判断
if(xhr.readyState == 4){
if(xhr.status >= 200 && xhr.status < 300)
{
//处理服务端返回的结果
result.innerHTML = xhr.response;
}
}
}
})
server端
//1. 引入express
const { response } = require('express');
const express = require('express');
const { request } = require('http');
const cors=require('cors');
//2.创建应用对象
const app = express();
app.use(cors());
//3.创建路由规则
//repuest 是对请求报文的封装
//response 是对响应报文的封装
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');
});
//4.监听端口启动服务
app.listen(8000, ()=>{
console.log("服务已经启动,8000端口监听中……")
})
5.服务端响应JSON数据
前端
const result = document.querySelector('.result');
//绑定键盘按下事件
window.onkeydown = function(){
//发送请求
const xhr = new XMLHttpRequest();
//初始化
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){
// console.log(xhr.response);
// result.innerHTML = xhr.response;
//手动对数据进行转换
let data = JSON.parse(xhr.response);
console.log(data);
}
};
};
后端
//1. 引入express
const { response } = require('express');
const express = require('express');
const { request } = require('http');
const cors=require('cors');
//2.创建应用对象
const app = express();
app.use(cors());
//3.创建路由规则
//repuest 是对请求报文的封装
//response 是对响应报文的封装
app.get('/server', (request, response) => {
//设置响应头 设置允许跨域
response.setHeader('Access-Control-Allow-Origin','*');
//设置响应体
response.send('HELLO AJAX');
});
//可以接收任意类型的请求
app.all('/server', (request, response) => {
//设置响应头 设置允许跨域
response.setHeader('Access-Control-Allow-Origin','*');
//响应头
response.setHeader('Access-Control-Allow-Headers','*')
//设置响应体
response.send('HELLO AJAX POST');
});
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);
});
//4.监听端口启动服务
app.listen(8000, ()=>{
console.log("服务已经启动,8000端口监听中……")
})
6.nodeMon安装
使用国内源安装
npm config set registry=https://registry.npm.taobao.org
npm install -g nodemon
7.ajax终止请求
x.abort()
8.jsonnp
跨域请求返回必须是一段json代码