AJAX:
Asynchronous JavaScript and XML。现在允许浏览器与服务器通信而无须刷新当前页面的技术都被叫做Ajax.(B/S:前后端分离)
使用场景举例:
在百度等搜索引擎打出xxs时输入框会自动弹出相关的信息、网页地图放大或者缩小时并不会刷新网页等。
原理:
使用ajax与服务器交互时,发送以及接收的信息是特殊数据格式,而非整个网页程序,因此不需要刷新。即数据在客户端与服务器之间独立传输。服务器不再返回整个页面,而只返回可用信息。
发送Ajax请求步骤:
1.调用open方法,代表预备发送请求。
2.如果请求类型为POST,则需设定响应头。
3.发送http请求指令,传递参数。
4.声明请求状态改变的回调函数,接收服务器响应信息。
readyState:表示Ajax请求的当前状态,取值范围如下:
0 代表未初始化。 还没有调用 open 方法
1 代表正在加载。 open 方法已被调用,但 send 方法还没有被调用
2 代表已加载完毕。send 已被调用。请求已经开始
3 代表交互中。
4 代表完成。响应发送完毕。(一般情况下只需判断此状态即可)。
status:服务器发送的响应状态码,常用状态码及其含义:
404 没找到页面(not found)
403 禁止访问(forbidden)
500 内部服务器出错(internal service error)
200 一切正常(ok)
304 没有被修改(not modified)
注意:通过XHR.status和200比较,可以确保服务器是否已发送了一个成功的响应
json文件的内容:
"{\"user\":\"zhangsan\",\"age\":19,\"date\":\"2019-09-23T02:55:11.945Z\",\"money\":[1,2,3]}"
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
// js里XMLHttpRequest类似于python里的request、urlib
// XHR是XMLHttpRequest对象的缩写,封装在window对象中,封装了发送AJAX请求、接收响应的属性以及方法。
// 如果XMLHttpRequest对象存在,则把 xhr 的值设为该对象的新实例。如果不存在,就去检测 ActiveObject 的实例是否
//存在,如果答案是肯定的,则把微软 XMLHTTP 的新实例赋给 xhr
function getXHR(){
if(window.XMLHttpRequest){
return new window.XMLHttpRequest()
}else{
// 解决微软的特殊情况
new window.ActiveXObject('Microsoft.XMLHTTP')
}
}
//异步请求数据函数
function jsonData(){
var xhr = getXHR() //局部化,防止冲突
xhr.open('GET','data.json')
//xhr.setRequestHeader()
xhr.send(null)
xhr.onreadystatechange=function(){
if(xhr.readyState ==4 && xhr.status==200){
//得到服务器返回的jaon字符串
resp = xhr.responseText
htmlText = ''
//解析字符串为json对象,解析两遍是因为JSON.parase(resp)是字符串类型
jsonObj = JSON.parse(JSON.parse(resp))
//console.log(typeof(jsonObj)) //查看类型
//组织显示html格式
htmlText = '<tr><td>' + jsonObj.user +'</td></tr>'
document.getElementById('userData').innerHTML = htmlText
}
}
}
// function setInnerHTML(id,text){
// document.getElementById(id).innerHTML = htmlText
// }
</script>
</head>
<body>
<input type="button" value="加载" onclick="jsonData()"/>
<table>
<thead>
<tr><td>用户名</td></tr>
</thead>
<tbody id='userData'> </tbody>
</table>
</body>
</html>