ajax的运用一向是以jQuery为主,关于底层的完成有点不明觉厉。作为一个有寻求的前端,这是不可以吸收的。便让我们今晚好好走进ajax的内心世界。
ajax 两大特征:
- 在不革新页面的情况下向服务器端发送要求
- 从服务器端吸收数据,并举行对应的逻辑处置惩罚
ajax 要求流程
step-1
起首先竖立一个异步要求对象
var httpRequest
if(window.XMLHttpRequest) {
httpRequest = new XMLHttpRequest();
} else if(window.ActiveXObject) {
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
step-2
第一步的httpRequest对象设置已好了。然后我们要做的就是设置我们的要求被响应时的行动
httpRequest.onreadystatechange = function(){
if(httpRequest.readyState === 4) {
// everything is good, the response is received
} else {
// still not ready
}
}
readyState 申明
- 0 (’UNSENT’,未初始化,即httpRequest对象已建立,然则open()要领还没挪用)
- 1 (‘OPENED’,载入中, 即要求已open()过了,然则send()要领还没挪用)
- 2 (‘HEADERS_RECEIVED’,已载入, 即send()过了,然则data数据还没返回)
- 3 (‘LOADING’,动态交互,即data数据已吸收到了,然则responseText内容会猎取)
- 4 (‘DONE’,完成, 即悉数data数据吸收胜利)
Response 属性
- status (返回状况码,比方1/2/3/4/500)
- statusText(返回状况文本,比方OK)
- responseType(返回响应的状况, 比方’loading’,’done’)
- response (返回响应的详细内容)
- responseText(返回响应的详细文本内容)
step-3
然后来写一个简朴的demo
<span id="ajaxButton" style="cursor: pointer; text-decoration: underline">
Make a request
</span>
<script>
(function(){
var httpRequest;
if (window.XMLHttpRequest) {
httpRequest = new XMLHttpRequest();
} else if(window.ActiveXObject) {
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
if (!httpRequest) {
alert('Giving up :( (Cannot create an XMLHTTP instance');
return false;
}
httpRequest.onreaystatechange = function() {
if (httpRequest.readyState === 4) {
if (httpRequest.status === 200) {
alert(httpRequest.responseText);
} else {
alert('There was a problem with the request.');
}
}
}
httpRequest.open('GET', url);
httpRequest.send();
})()
</script>
爱心小贴士:
- 假如发送要求以后返回的数据格式为XML时,那末在IE中须要设置http-header头, “Content-Type”: application/xml 不然IE会抛出一个”Object Expected”的毛病
- 假如你没有http-header Cache-Control: no-cache, 那末浏览器则会缓存要求,不会再发送新的要求。固然你还可以运用时间戳之类的情势来使每次要求的url差别,来绕过缓存题目。
- 在闭包中举行ajax相干的操纵。
返回的数据为JSON时,应对数据举行响应的剖析
function alertContents() {
if(httpRequest.readyState === 4) {
if(httpRequest.status === 200) {
var response = JSON.parse(httpRequest.responseText);
} else {
alert('There was s problem with the request.');
}
}
}