简单来说就是 通过XmlHttpRequest对象向服务器发异步请求,从服务器获得数据,然后用 javascript 来操作DOM更新页面的技术。
Ajax的使用分为四部分:
1.) 创建一个XMLHttpRequest对象;
1. 兼容IE低版本浏览器(ie5-ie6);
2. 使用if,else或者try,catch;
2.) 配置请求信息;
1. 请求的方式;
2. 请求文件的路径;
3. 是否异步,默认为true;
3.)发送请求;
1. get与post的区别;
2. get与post的使用场景;
4.) 监听状态变化,执行相应回调函数;
1. http状态码都有哪些?
2. 不同状态码代表的含义?
目前所有的现代浏览器(包括IE7+、Firefox、Chrome、Safari 以及 Opera)均内建有 XMLHttpRequest 对象,写法如下:
var xhr = new XMLHttpRequest();
低版本的 IE 浏览器 (主要指 IE5 和 IE6)没有XMLHttpRequest 对象,使用 ActiveXObject 对象,写法如下:
var xhr =new ActiveXObject("Microsoft.XMLHTTP");
举个兼容性写法的例子:
为了兼容所有的现代浏览器,包括 IE5 和 IE6,需要判断浏览器是否支持 XMLHttpRequest 对象。如果支持,则创建 XMLHttpRequest 对象。如果不支持,则创建 ActiveXObject :
var xhr;
if (window.XMLHttpRequest)
{
// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
xhr = new XMLHttpRequest();
}
else
{
// IE6, IE5 浏览器执行代码
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
使用 XMLHttpRequest 对象的 open() 和 send() 方法:
方法 | 参数配置 |
---|---|
open(method, url, async) | method:请求的类型, GET 或 POST;url:文件在服务器上的位置;async:布尔值,判断是否异步,true为异步(默认)或 false为同步; |
send(string) | string:参数,get不传参,仅用于 POST 请求 |
注意:
xhr.open("GET","/try/ajax/ajax_demo.txt",false);
xhr.send();
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
举个栗子:
// 使用get方法请求服务器上的1.txt文件
xhr.open("GET","1.txt",true);
xhr.send();
3.2.3 只能使用 POST 请求的情况:
它其实就类似于 HTML 表单那样 POST 数据,我们需要使用 setRequestHeader() 来添加 HTTP 头。然后在 send() 方法中写要发送的数据:
向请求添加 HTTP 头方法如下:
xhr.setRequestHeader(header,value);
// header: 规定头的名称;
// value: 规定头的值;
xhr.open("POST","/try/ajax/demo_post2.php",true);
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xhr.send("fname=Zhou&lname=minghang");
异步请求时的监听事件变化函数如下:
xhr.onreadystatechange=function()
{
if (xhr.readyState==4 && xhr.status==200){
document.getElementById("myDiv").innerHTML = xhr.responseText;
}else{
console.log(‘失败了‘);
}
}
存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。
一般常见的状态码有:
状态码具体含义:
如果我们想获得服务器上的数据,并进行相应的操作,这就要用到XMLHttpRequest 对象的 responseText 或 responseXML 属性。
获得字符串形式的响应数据
;document.getElementById("myDiv").innerHTML=xhr.responseText;
xmlDoc=xmlhttp.responseXML;
txt="";
x=xmlDoc.getElementsByTagName("ARTIST");
for (i=0;i<x.length;i++)
{
txt=txt + x[i].childNodes[0].nodeValue + "<br>";
}
document.getElementById("myDiv").innerHTML=txt;
原文链接:https://www.jianshu.com/p/2be2e4f1fc8e
原文:https://www.cnblogs.com/fsg6/p/13154577.html