AJAX
异步 js 和 xml
前端程序 和 后端程序 交换的方式
异步
局部数据交互(没有页面跳转)
ajax使用的面向对象编程方式
通过 内置构造函数 创建 ajax实例化对象
通过 ajax实例化对象的函数方法 执行对应的程序
1, 创建ajax实例化对象
const xhr = new XMLHttpRequest();
2, 设定请求方式 设定请求url地址
xhr.open('psot','url地址')
3, 如果是post方式 需要设定请求头格式
xhr.setRequestHeader( 'Content-Type' , 'application/x-www-form-urlencoded' );
4, 发送设定好的请求
send()
5, 接收请求结果
xhr.addEventListener('load' , ()=>{
console.log( xhr.response );
})
})
<script>
oBtn.addEventListener('click' , ()=>{
const xhr = new XMLHttpRequest();
console.log( xhr );
xhr.open( 'get',`http://localhost:8888/test/third?name='张三'&age=${Number(oIptAge.value)}`);
xhr.send();
xhr.addEventListener('load' , ()=>{
console.log( xhr.response );
})
})
</script>
<script>
oBtn.addEventListener( 'click' , ()=>{
const xhr = new XMLHttpRequest();
xhr.open( 'post' , 'http://localhost:8888/test/fourth' );
xhr.setRequestHeader( 'Content-Type' , 'application/x-www-form-urlencoded' );
xhr.send(`name=${oIptName.value}&age=${Number( oIptAge.value )}`);
xhr.addEventListener('load' , ()=>{
console.log( xhr.response );
})
})
</script>
function myAjax( resObj = {} ) {
const valObj = {
type: 'get',
data: '',
url: '',
success: () => { },
error: () => { },
};
if (typeof (resObj.data) === 'object') {
let str = '';
for (let key in resObj.data) {
str += `&${key}=${resObj.data[key]}`;
}
resObj.data = str.substr(1);
}
for (let key in valObj) {
if (resObj[key] !== undefined) {
valObj[key] = resObj[key];
}
}
const xhr = new XMLHttpRequest();
console.log(xhr);
if (valObj.type.toLowerCase() === 'get') {
xhr.open('get', valObj.data === '' ? valObj.url : `${valObj.url}?${valObj.data}`);
xhr.send();
} else if (valObj.type.toLowerCase() === 'post') {
xhr.open('post', valObj.url);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send(valObj.data);
}
xhr.addEventListener('load', () => {
if (xhr.readyState === 4 && /^2\d{2}$/.test(xhr.status)) {
valObj.success(xhr.response);
} else {
valObj.error();
}
})
}
myAjax({
type:'post',
url:'http://localhost:8888/users/login',
data:{
username:oIptName.value,
password:oIptPwd.value,
},
success:function( result ){
console.log( result );
},
error:()=>{
console.log('请求失败')
}
});
})
0 表示只是创建了ajax实例化对象
1 表示ajax实例化对象设定了 open 以及 请求头
2 表示ajax实例化对象执行了 send 发送了请求
3 表示ajax请求结束了 接收了 响应报文
4 表示ajax从 响应报文中解析了响应体数据
存储到 ajax实例化对象的 response 和 responseText 中
当 ajax状态码 是 4 时 表示 请求结束 并且 解析完成了 响应体数据
200 - 299 表示请求结束并且请求成功