一、传统的JavaScript实现的Ajax
步骤:
1. 声明一个对象用来装入XMLHttpRequest对象
2. 给XMLHttpRequest对象赋值
3. 实例化成功后,使用open()方法初始化XMLHttpRequest对象
4. 回调事件,当它的readyState值改变时会激发一个readystatechange事件
5. 使用send()方法发送该请求
<script type="text/javascript">
function Ajax(){
var xmlHttpReq = null;
if(window.ActiveXObject){ //IE5 IE6 是以ActiveXObject的方式引入XMLHttpRequest对象的
xmlHttpReq = new Active XObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest){ //除IE5 IE6 以外的浏览器,XMLHttpRequest是window的子对象
xmlHttpReq = new XMLHttpRequest(); //实例化一个XMLHttpRequest对象
}
xmlHttpReq.open("GET","test.aspx",true); //调用open()方法并采用异步方式,使用get方式传递参数时用test.aspx?name=Jack.
xmlHttpReq.onreadystatechange = RequestCallBack; //设置回调函数
xmlHttpReq.send(null); //因为使用GET方法提交,所以可以使用null作为参数
}
function RequestCallBack(){ //一旦readyState值改变,将会调用该函数
if(xmlHttpReq.readyState == 4){ //请求完成加载
if(xmlHttpReq.status == 200){ //响应已经成功
document.getElementById("resText").innerHTML = xmlHttpReq.responseText;
}
}
}
</script>
<input type="button" value="Ajax提交" onclick="Ajax();"/>
<div id="resText"></div>
------------------
使用Post提交时,需要设置请求头部
xmlHttpReq.open("POST","test.aspx",true); //调用open()方法并采用异步方式
xmlHttpReq.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlHttpReq.send("name=Jack&pwd=123"); //因为使用POST方法提交,参数是放在send方法里的
后台返回数据后调用此方法:
xmlHttpReq.onreadystatechange =RequestCallBack; //设置回调函数
-------------------------------------------------------------
因为XMLHttpRequest对象的很多属性和方法,对于想快速入门Ajax的人来收,并不是个容易的过程。为了开发人员能够将程序开发集中在业务和用户体验上,而不用去理会那些繁琐的XMLHttpRequest对象,于是有了下面的Jquery中的Ajax。
-------------------------------------------------------------
JQuery中的Ajax
JQuery对Ajax操作进行了封装,在JQuery中$.ajax()方法属于最底层的方法,
第2层是load()、$.get() 和$.post()方法,
第3层是$.getScript()和$.getJSON()方法。
---------
1. load()方法是JQuery中最为简单和常用的Ajax方法,能载入远程HTML代码并插入DOM中。
load(url [,data] [,callback]);后两个参数是可选的
--load()方法的传递方式根据参数data来自动指定。如果没有这个参数,则采用GET方式传递;反之,为POST方式。
JQuery代码如下:
$(function(){
$("#send").click(function(){
$("#resText").load("test.html");
});
});
<input type="button" id="send" value="Ajax获取"/>
<div id="resText"></div>
test.html页面的HTML内容会被加载并插入<div id="resText"></div>的元素中。
--如果只需要加载test.html页面内的某些元素,那么可以使用load()方法的URL参数来达到目的。
load()方法的URL参数的语法结构为:"url selector"。注意,url和选择器之间有一个空格。
例如只需要加载test.html页面中class为“para”的内容,则可以
$("resText").load("test.html .para");
//无data参数传递,是GET方式
$("#resText").load("test.aspx",function(){
//...
});
//有data参数传递,则是POST方式
$("#resText").load("test.aspx",{name:"rain",age:"22"},function(){
//...
});
--回调函数
$("#resText").load("test.html",function(responseText, textStatus, XMLHttpRequest){
// responseText: 请求返回的内容
//textStatus : 请求状态:success、error、notmodified、timeout
// XMLHttpRequest : XMLHttpRequest对象
});
2. $.get() 方法
load()方法通常用来从Web服务器上获取静态的数据文件,如果需要传递一些参数给服务器中的页面,那么可以使用$.get()或者$.post()方法。
$.get()方法使用GET方式来进行异步请求。
结构为:$.get( url [, data] [,callback] [, type] )
参数说明:callback,只有当Response的返回状态是success才调用该方法。
type,类型是String,服务器端返回内容的格式,包括xml、html、script、json、text和_default
返回不同的数据格式有不同的处理方法:
(1)返回HTML格式
$(function(){
$("#send").click(function(){
$.get("test.aspx",{
username:$("#username").val(),
content:$("#content").val()
},function(data, textStatus){
$("#resText").html(data); //将返回的数据添加到页面上
});
});
})
(2)XML文档
由于服务器端返回的数据格式是XML文档,因此需要对返回的数据进行处理,处理XML文档与处理HTML文档一样,也可以使用常规的attr()、find()、filter()以及其他方法。
$(function(){
$("#send").click(function(){
$.get("test.aspx",{
username:$("#username").val(),
content:$("#content").val()
},function(data, textStatus){
var username= $(data).find("comment").attr("username");
var content = $(data).find("comment content").text();
var txtHtml = "<div class='comment'>"+username+"<p class='para'>"+content+"</p></div>";
$("#resText").html(txtHtml); //将处理后的数据添加到页面上
});
});
})
由于要服务器端返回的数据格式是XML文档,因此需要在服务端设置Content-Type类型为text/xml
(3) JSON文件
之所以出现这种数据格式的文件,很大程度上是因为XML文档体积大和难以解析。JSON文件和XML文档一样,也可以方便的被重用。
也需要对返回的JSON数据进行处理,才可以将新的HTML数据添加到主页面中。
$(function(){
$("#send").click(function(){
$.get("test.aspx",{
username:$("#username").val(),
content:$("#content").val()
},function(data, textStatus){
var username = data.username;
var content = data.content;
var txtHtml = "<div class='comment'>"+username+":<p class='para'>"+content+"</p></div>";
$("#resText").html(txtHtml); //将返回的数据添加到页面上
},"json");
});
})
3. $.post()方法
$(function(){
$("#send").click(function(){
$.post("test.aspx",{
username:$("#username").val(),
content:$("#content").val()
},function(data, textStatus){
$("#resText").append(data); //将返回的数据添加到页面上
});
});
})
另外,当load()方法带有参数传递时,会使用POST方式发送请求,因此可以用load()方法来完成相同的功能。
$(function(){
$("#send").click(function(){
$("#resText").load("test.aspx",{
username:$("#username").val(),
content:$("#content").val()
})
})
})
上面使用load()、$.get()和$.post()方法完成了一些常规的Ajax程序,如果还需要编写一些复杂的Ajax程序,就要用到JQuery中的$.ajax()方法。
$.ajax()方法不仅能实现上面的方法的功能,而且还可以设定beforeSend(提交前回调函数)、error(请求失败后处理)、success(请求成功后处理)、complete(请求完成后处理)回调函数,通过这些回调函数,可以给用户更多的Ajax提示信息。
4. $.getScript()
有时候,在页面初次加载时就取得所需的全部JavaScript文件是完全没有必要的。虽然可以在需要哪个Javascript文件时,动态地创建<script>标签,
$(document.createElement("script")).attr("src","test.js").appendTo("head");或者
$("<script type='text/javascript' src='test.js'/>").appendTo("head");
但这种方式并不理想,为此,JQuery提供了$.getScript()方法来直接加载.js文件。加载完后会自动运行里面的函数。
$(function(){
$('#send').click(function(){
$.getScript('test.js');
});
})
$.getScript()方法也有回调函数,它会在JavaScript文件成功载入后运行。例如想载入JQuery官方颜色动画插件(jquery.color.js).
$(function(){
$.getScript('/jquery.color.js',function(){
$("#go").click(function(){
$(".block").animate({backgroundColor:'pink'},1000)
.animate({backgroundColor:'blue'},1000);
});
});
})
当jquery.color.js动画插件加载完毕后,单击id为“go”的按钮时,class为block的元素就有了颜色动画变化。
5. $.getJSON()
$.getJSON()方法用于加载JSON文件,与$.getScript()方法的用法相同。
$(function(){
$("#send").click(function(){
$.getJSON('test.json',function(data){
//data:返回的数据
});
});
})
用$.each()处理返回的数据:
$(function(){
$("#send").click(function(){
$.getJSON('test.json',function(data){
$('#resText').empty();
var html = '';
$.each(data,function(commentIndex, comment){
html +='<div >'+comment['username']+':<p>'+comment['content']+'</p></div>';
});
$('#resText').html(html);
});
});
})
6. $.ajax()方法
是jquery最底层的Ajax实现。它的结构为:
$.ajax(options) ,参数以key/value的形式存在,所有参数都是可选的。
常用参数:
参数名称 类型 说明
url String
type String
timeout Number
data Object或String
dataType String
beforeSend Function
complete Function
success Function
error Function
global Boolean
--------------------------