之前了解Ajax技术是在做python爬虫的时候,有的web站点会使用该技术来实现不刷新页面的情况下更新数据,为了实现对目标站点的爬取,需要截取页面xhr更新的json数据。
AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。
AJAX 不是新的编程语言,而是一种使用现有标准的新方法。
AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。
AJAX 不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。
摘自菜鸟教程
XHR创建一个对象:
创建 XMLHttpRequest 对象的语法:
variable=new XMLHttpRequest();
老版本的 Internet Explorer (IE5 和 IE6)使用 ActiveX 对象:
variable=new ActiveXObject("Microsoft.XMLHTTP");
var xmlhttp;
if (window.XMLHttpRequest)
{
// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
xmlhttp=new XMLHttpRequest();
}
else
{
// IE6, IE5 浏览器执行代码
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
向服务器发送请求:
xmlhttp.open("GET","ajax_info.txt",true);
xmlhttp.send();
方法 描述 open(method,url,async) 规定请求的类型、URL 以及是否异步处理请求。
- method:请求的类型;GET 或 POST
- url:文件在服务器上的位置
- async:true(异步)或 false(同步)
send(string) 将请求发送到服务器。
- string:仅用于 POST 请求
get方式发送请求:
xmlhttp.open("GET","/try/ajax/demo_get.php",true);
xmlhttp.send();
最后的参数为设置异步的参数
如果设置异步为false,那么JavaScript会等服务器相应之后才会处理下一步的执行,会导致堵塞
服务器响应:
属性 描述 responseText 获得字符串形式的响应数据。 responseXML 获得 XML 形式的响应数据。
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
该段demo修改了id为myDiv的元素的内容为响应获取的数据。
响应执行的事件:
onreadstatechange事件
xhr对象的三个重要属性:
属性 描述 onreadystatechange 存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。 readyState 存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。
- 0: 请求未初始化
- 1: 服务器连接已建立
- 2: 请求已接收
- 3: 请求处理中
- 4: 请求已完成,且响应已就绪
status 200: "OK"
404: 未找到页面
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
该段demo修改onreadystatechange事件,判断readyState和响应的状态码,进一步修改页面的内容。
更多实例: