关于ajax异步提交数据
一:古老的方式:
得到XMLHttpRequest(我装了IE和FireFox,所以例子就由这2个来举例)
如何得到?
代码:
function getXmlHttpRequest(){
var xhr;
if(XMLHttpRequest){ //如果这个对象存在就是true,如果这个对象不存在就false
xhr=new XMLHttpRequest();
}else{
xhr=new ActiveXObject("Microsoft.XMLHttp");
}
return xhr;
}
由if(XMLHttpRequest)判断该浏览器是IE浏览器还是FireFox
由于不同浏览器获取ajax引擎不同。所以在获取ajax引擎时必须要判断当前的浏览器类型。
下面
有个例子
function a_click(){
var xhr=getXmlHttpRequest();//调用方法得到Ajax引擎(所谓引擎,你就把他当
做一个工具就可以了,专门为用户执行异步请求的一个工具)
xhr.open("get","testajax01.jsp",true);//得到工具后打开(第一个参数 什 方式发送请求,
可以写
”
get”
可以写
”
post”
,第二个参数是你请求的页面,第三个参数是,需不需要异步请求,如果写false则界面就会刷新,一般调用了ajax引擎都是异步的,所以这里一般都写true)
xhr.onreadystatechange=function(){//为ajax引擎绑定个onreadystatechange这个
时件,当xhr.readyState发生 化时,就会触发这个事件,就是会调用这个方法。
if(xhr.readyState==4){//一共有5个状态值,当状态值为4,就说明数据已经返回
if(xhr.status==200){//当你访问页面时,页面会有状态码,比如404就说明你要访问的文件不存在,500则说明你访问的页面出错,而200则是正常返回
var txt=xhr.responseText;//responseText是你异步访问的页面的返回值
document.getElementById("message").innerHTML=txt;//让你的返回值在页面显示
}else{
}
}
};
xhr.send();//发送请求
}
下面
点击前:
点击后:
页面未刷新。
我异步访问的是个
jsp文件:
就一句话,返回
aaaa字符串。
readyState 5个状态值:
">
">二.
JQuery方法
上面的方法确实太繁琐,而且名字又长,真是难记啊。
所以
下面
来种简便的方法,是JQuery对Ajax的支持,
先来个简单的例子,实现和上面一样的功能,看看需要多少
代码:
$(function(){
$("#a_click").click(function(){
$("#message").load("testajax01.jsp"
);
});
});
没错,这么几句已经完全能满足刚才的业务了。
你不用再自己去判断用户所用的是哪种浏览器了,因为JQuery兼容各种浏览器,
下面
我来解释下代码:
$(function(){});代码最外层 包了这么一个东西,
其实这个东西跟window.onload=function(){};
是一个意思
就是当页面完全加载完毕后调用里面的方法。这个非常常用,所以JQuery把他搞成更简便的方法$(function(){});直接在里面写方法,在页面加载完毕之后就会调用的。
点击前:
点击后:
跟上面的功能一样,
但是代码却少了很多很多。
看过去也更加清爽。
下面
再简单介绍下另外JQuery对Ajax支持的3种方法。
分别是:$.get() $.post() $.ajax
下面
分别完成上面那个简单的业务
$.get()例子:
$("#a_click").click(function(){
$.get("testajax01.jsp",function(data){
$("#message").html(data);
});
});
虽然比load要麻烦点 但与前面的方法比起来 还是要方便很多的,$.post与$.get大同小异,就不过多赘述了
$.ajax()例子:
$.ajax({
url:"testajax01.jsp",
success:function(data){
$("#message").html(data);
}
});
看起来比上面的$load $.get方法都要麻烦,但是,这是最常用的的方法。
因为它get post都支持,还有就是,他只有一个参数,是个json对象,
你可以在里面配置各种参数。
也能实现业务
好这里就简答介绍下
ajax实现的几种方法,可能不是很全面,
但是大家可以提出,在后续的帖子我也会跟进
还是那句话,有问必答。