ajax
Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)
官方文档说明,AJAX 不是新的编程语言,而是一种使用现有标准的新方法。
优点
1)可以无需刷新页面与服务器端通信,部分更新
缺点
1)没有浏览器历史,有跨域问题
2)seo不友好
HTTP
hTPP协议:超文本传输协议,协议详细规定了浏览器和万维网服务器之间互相通信的规则。
请求报文
重点是格式与参数,以下是格式与相应内容举例
行 Get/Post /s?ie=utf-8 http/1.1 Get单纯的读取资源,
Post会传入一定的数据
头 Host: baidu.com
Cookie:name=test
Content-type: application/x-www-form-urlencoded
User-Agent: chrome 83
空格
体 get请求,请求体可以为空
username=admin&password=admin
响应报文
行 HTTP/1.1 200 OK
头 Content-Type:text/html;charset=utf-8
Content-length: 2048
Content-encoding: gzip
空行
体 <HTML></HTML>
后端
var express = require('express');//引入express
var mysql = require('mysql');//引入mysql
var app = express();//创建实例
app.post('/user',(req,res)=>{
//设置响应头,设置允许跨域
res.setHeader('Access-Control-Allow-Origin','*');
//设置请求头时需要用app.all
res.setHeader('Access-Control-Allow-Headers','*');
//发送
res.send(rows);
});
app.get/app.all
XMLHttpRequest发送ajax
//1、创建对象
const xhr = new XMLHttpRequest();
//2、初始化
xhr.open('POST','http://127.0.0.1:3000/user');
//3、设置请求头,这是自带的请求头
xhr.setRequestHeader('Content-Type'
,'application/x-www-from-urlencoded');
//4、这是自定义的请求头,自定义请求头需要服务器设置响应头
xhr.setRequestHeader('name','test3');
//发送
xhr.send('name=test3');
//绑定
xhr.onreadystatechange = function(){
if(xhr.readyState === 4){//判断(服务端返回了所有的结果)
if(xhr.status >=200 &&xhr.status <300){
result.innerHTML = xhr.response;
}
}
}
// console.log(xhr.status);//状态码 200
// console.log(xhr.statusText);//状态字符串 ok
// console.log(xhr.getAllResponseHeaders());//得到响应头
// console.log(xhr.response);//响应体
readyState有五种可能的值:
0 (未初始化): (XMLHttpRequest)对象已经创建,但还没有调用open()方法。
1 (载入):已经调用open() 方法,但尚未发送请求。
2 (载入完成): 请求已经发送完成。
3 (交互):可以接收到部分响应数据。
4 (完成):已经接收到了全部数据,并且连接已经关闭。
使用axios在vue中简单获取
基于promise
npm install axios -s 命令行安装
```javascript
import axios from 'axios';//引入,axios无需use
<button @click="getUser">注册</button> //模板页面内容
beforeCreate() {
axios.defaults.baseURL = 'http://127.0.0.1:3000'
//设置公共接口
},
methods:(){
getUser(){
axios.get('/user',{
params:{
id:1
},
headers:{ //请求头
name:'test'
} });}}
使用fetch简单获取
基于promise
同源策略
是浏览器的一种安全策略
同源:协议、域名、端口号 必须完全相同
违背同源策略就是跨域,ajax是默认支持同源
3000端口向8080端口发送服务器
跨域解决方案
Jsonp
通过script标签来从服务器跨域请求,但服务器返回结果需要是js代码
CORS 跨域资源共享
是官方跨域解决方案,不需要客服端做操作
完全在服务器中进行处理
支持get和post请求
跨域资源共享标准新增了http首部字段
允许服务器声明那些源站通过流浪器有权限访问哪些资源
在服务器设置响应头