xhr.readyState 不同值的不同意思:
xhr.status 不同值的不同意思:
// test.json
{ "name": "zhangsan"}
const xhr = new XMLHttpRequest()
xhr.open('GET', './test.json', true) // true 表示异步
xhr.onreadystatechange = function () {
if(xhr.readyState === 4) {
if(xhr.status === 200) {
console.log(JSON.parse(xhr.responseText))
} else {
console.log('其他情况')
}
}
}
xhr.send(null)
示例:登录的请求,注意:需要传参
const xhr = new XMLHttpRequest()
xhr.open('POST', '/login', true)
xhr.onreadystatechange = function () {
if(xhr.readyState === 4) {
if(xhr.status === 200) {
console.log(JSON.parse(xhr.responseText))
}
} else {
console.log('其他情况')
}
}
const postData = {
username: 'zhangsan',
password: 'xxx'
}
xhr.send(JSON.stringify(postData))
可用于统计打点,可使用第三方统计服务
可使用 CDN,CDN 一般都是外域
可实现 JSONP <img src="跨域的图片地址"/>
<link href="跨域的css地址"/>
<script src="跨域的js地址"></script>
可以绕过跨域限制
就可以获得跨域的数据,只要服务端愿意返回
- npm install http-server -g 安装服务
- http-server -p xxxx 设置服务地址并启动服务
// jsonp.js
abc (
{name: 'xxx'}
)
// Demo.html
<script>
window.abc = function (data) {
console.log(data)
}
</script>
<script src="http://localhost:8002/jsonp.js?username=xxx&callback=abc"></script>
$.ajax({
url: 'http://localhost:8002/jsonp.js?username=xxx',
dataType: 'jsonp',
jsonpCallback: 'callback',
success: function (data) {
console.log(data)
}
})
出处:https://coding.imooc.com/lesson/400.html#mid=30315
function ajax(url) {
const p = new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest()
xhr.open('GET', url, true)
xhr.onreadystatechange = function() {
if(xhr.readyState === 4) {
if(xhr.status === 200) {
resolve(
JSON.parse(xhr.responseText)
)
} else if (xhr.status === 404) {
reject(new Error('404 not found'))
}
}
}
xhr.send(null)
})
return p
}
const url = './test.json'
ajax(url)
.then(res => console.log(res))
.catch(err => console.error(err))
不积跬步无以至千里 不积小流无以成江海
点个关注不迷路,持续更新中…