<img src="跨域图片地址" />
<link ref="跨域css地址" />
<script src="跨域的js地址"></script>
跨域常见方式:JSONP、CORS(本文不多作详解)
function ajax(url) {
const p = new Promise ((reslove,reject)=>{
const xhr = new XMLHttpRequest();
xhr.open('get',url,true);
xhr.onreadystatechange = function() {
if(xhr.readyState === 4) {
if(xhr.status === 200) {
reslove(
JSON.parse(xhr.responseText)
)
}else if(xhr.status === 404){
reject(new Error('404 not found'))
}
}
}
xhr.send(null)
})
return p;
}
open方法,创建http请求,并指定此请求的方法、URL以及验证信息(用户名/密码)。
xhr.open('get',url,true); //此处调用的是'get'方法
第一个参数是请求方式,一般用get与post方法;
第二个参数是请求的URL;
第三个参数是请求是同步进行还是异步进行,true表示异步。
4. ajax请求状态
(1)readyState
0:未初始化,未调用send();
1:载入,已调用send(),正在发送请求
2:载入完成,send()执行完成,已接受到响应内容
3:交互,正在解析响应内容
4:完成,响应内容解析完成
(2)status
前端向后端请求数据时,无论请求的这个接口成功或者失败,都会带有返回的状态值。我们可以通过这个状态码可以得知这个请求是否成功,处于什么样的状态。
常见的状态码有:
200:交易成功
404:没有发现文件、查询或者URL
详细的xhr.status状态码
使用ajax请求
const url = '/data/test.json';
ajax(url).then(res=>{console.log(res)}).catch(err=>{console.error(err)})
在实际Vue3项目开发中,前后端数据交互使用axios,axios是对ajax技术的封装。
npm install axios
import axios from 'axios'
在项目开发中,将aixos请求封装一下,代码会更加清晰简洁,方便后期维护。
const instance = axios.create({
baseURL: 'https://www.fastmock.site/mock/ae8e9031947a302fed5f92425995aa19/jd',
timeout: 100000
})
export const get = (url, params = {}) => {
return new Promise((resolve, reject) => {
instance.get(url, { params }).then((response) => {
resolve(response.data)
}, err => {
reject(err)
})
})
}
export const post = (url, data = {}) => {
return new Promise((resolve, reject) => {
instance.post(url, data, {
headers: {
'Content-Type': 'application/json'
}
}).then((response) => {
resolve(response.data)
}, err => {
reject(err)
})
})
}
在组件中,使用数据请求时:
import { get,post } from '../../utils/request'
当然搭配 async await更香哦~
const hanldeRegister = async () => {
try {
const result = await post('/api/user/register', {
username: data.username,
password: data.password
})
if (result?.errno === 0) {
router.push({ name: 'Login' })
} else {
showToast('注册失败')
}
} catch (e) {
showToast('请求失败')
}
}
本文是一位仍在学习路上的中国青年随手而作,有错误欢迎指正,期待与诸位一起学习进步~