概述
什么是AJAX?
AJAX = 异步 JavaScript 和 XML。
AJAX 是一种用于创建快速动态网页的技术。
AJAX 不是新的编程语言,而是一种使用现有标准的新方法。
AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。
AJAX 不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。
工作原理:
AJAX是基于现有的Internet标准
AJAX是基于现有的Internet标准,并且联合使用它们:
XMLHttpRequest 对象 (异步的与服务器交换数据)
JavaScript/DOM (信息显示/交互)
CSS (给数据定义样式)
XML (作为转换数据的格式)
AJAX应用程序与浏览器和平台无关的!
创建 XMLHttpRequest 对象
语法:
variable=new XMLHttpRequest();
老旧版本:
variable=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 还是 POST?
与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用。然而,在以下情况中,请使用 POST 请求:
无法使用缓存文件(更新服务器上的文件或数据库)
向服务器发送大量数据(POST 没有数据量限制)
发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠
示例:
//一个简单的 GET 请求:
xmlhttp.open("GET","/ajax/demo_get",true);
xmlhttp.send();
//一个简单 POST 请求:
xmlhttp.open("POST","/ajax/demo_post",true);
xmlhttp.send();
如果需要像 HTML 表单那样 POST 数据,可以使用 setRequestHeader() 来添加 HTTP 头。
然后在 send() 方法中发送数据:
xmlhttp.open("POST","/ajax/demo_post",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("fname=Henry&lname=Ford");
说明:
setRequestHeader(header,value)
向请求添加 HTTP 头。
header: 规定头的名称
value: 规定头的值
open() 方法的 url 参数也可以是服务器上文件的地址,该文件可以是任何类型的文件,比如 .txt 和 .xml,或者服务器脚本文件。
异步 - True 或 False?
AJAX 指的是异步 JavaScript 和 XML(Asynchronous JavaScript and XML)。
XMLHttpRequest 对象如果要用于 AJAX 的话,其 open() 方法的 async 参数必须设置为 true:
xmlhttp.open("GET","ajax_test.html",true);
服务器响应
获得来自服务器的响应,可使用 XMLHttpRequest 对象的 responseText 或 responseXML 属性。
responseText 获得字符串形式的响应数据。
responseXML 获得XML形式的响应数据。
示例-文本json:
<html><head><meta charset="utf-8"><script>function loadXMLDoc(){var xmlhttp;if (window.XMLHttpRequest)
{// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
xmlhttp=new XMLHttpRequest();
}else
{// IE6, IE5 浏览器执行代码
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){if (xmlhttp.readyState==4 && xmlhttp.status==200)
{document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","http://wthrcdn.etouch.cn/weather_mini?citykey=101280101",true);
xmlhttp.send();
}script>head><body><div id="myDiv"><h2>使用 AJAX 修改该文本内容h2>div><button type="button" onclick="loadXMLDoc()">修改内容button>body>html>
运行,点击按钮后效果:
示例-XML对象进行解析:
<html><head><meta charset="utf-8"><script>function loadXMLDoc(){var xmlhttp;var txt,x,i;if (window.XMLHttpRequest)
{// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
xmlhttp=new XMLHttpRequest();
}else
{// IE6, IE5 浏览器执行代码
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
xmlDoc=xmlhttp.responseXML;
txt="";
x=xmlDoc.getElementsByTagName("ARTIST");for (i=0;i {
txt=txt + x[i].childNodes[0].nodeValue + "
";
}document.getElementById("myDiv").innerHTML=txt;
}
}
xmlhttp.open("GET","cd_catalog.xml",true);
xmlhttp.send();
}script>head><body><h2>我收藏的 CD :h2><div id="myDiv">div><button type="button" onclick="loadXMLDoc()">获取我的 CDbutton>body>html>
效果:
onreadystatechange 事件
当请求被发送到服务器时,我们需要执行一些基于响应的任务。每当 readyState 改变时,就会触发 onreadystatechange 事件。readyState 属性存有 XMLHttpRequest 的状态信息。
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;
}
}
使用回调函数
function myFunction(){
loadXMLDoc("/ajax/ajax_info.txt",function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
});
}
ajax.js网络请求封装示例
function ajax(url, fnSucc, fnFaild){
//1.创建Ajax对象
var oAjax=null;
if(window.XMLHttpRequest)
{
oAjax=new XMLHttpRequest();
}
else
{
oAjax=new ActiveXObject("Microsoft.XMLHTTP");
}
//2.连接服务器
oAjax.open('GET', url, true);
//3.发送请求
oAjax.send();
//4.接收服务器的返回
oAjax.onreadystatechange=function (){
if(oAjax.readyState==4) //完成
{
if(oAjax.status==200) //成功
{
fnSucc(oAjax.responseText);
}
else
{
if(fnFaild)
fnFaild(oAjax.status);
}
}
};
}
示例:
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>无标题文档title><script src="ajax.js">script><script>window.onload=function (){var oBtn=document.getElementById('btn1');
oBtn.onclick=function (){
ajax('data.json', function (str){var arr=eval(str);
alert(arr[0].b);
});
};
};script>head><body>
读取服务器上的一个文件,文件里面放了一个json<br /><input id="btn1" type="button" value="读取json" />body>html>
完
码上加油站
一起来加油
长按扫码关注
点“在看”你懂得