通过XMLHttpRequest和jQuery实现ajax的几种方式
示例一:利用Ajax来动态获取时间的例子。
HTML代码:
<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="Default.aspx.cs"Inherits="_Default"%> <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <htmlxmlns="http://www.w3.org/1999/xhtml"> <headrunat="server"> <title></title> <scripttype="text/javascript"src="Scripts/jquery-1.7.1.js"></script> <scripttype="text/javascript"src="Scripts/jwy.js"></script> </head> <body> <formid="form1"runat="server"> <div> <inputtype="text"name="textbox"id="text1"/> <inputtype="button"name="button"id="Button1"value="显示时间"onclick="btnclick()"/> </div> </form> </body> </html>
创建一个“一般处理程序”来处理前台请求,返回系统当前时间:
Handler.ashx
<%@WebHandlerLanguage="C#"Class="Handler"%> usingSystem; usingSystem.Web; usingSystem.Linq; usingSystem.Collections.Generic; usingSystem.Text; publicclassHandler:IHttpHandler{ publicvoidProcessRequest(HttpContextcontext){ context.Response.ContentType="text/plain"; context.Response.Write(ShowTime()); } publicboolIsReusable{ get{ returnfalse; } } publicstaticstringShowTime() { returnDateTime.Now.ToString(); } }
js代码:
functionbtnclick(){ varhttprequest=null; //初始化XMLHttpRequest对象 if(window.XMLHttpRequest){ //Firefox等现代浏览器中的XMLHttpRequest对象创建 httprequest=newXMLHttpRequest(); } elseif(window.ActiveXObject){ //IE中的XMLHttpRequest对象创建 httprequest=newActiveXObject("Microsoft.XMLHTTP"); } if(!httprequest){ alert("创建httprequest对象出现异常!"); } httprequest.open("POST","Handler.ashx",true); //httprequest向handler发送post请求,最后参数是设定是否为异步请求,true为异步,false为同步 httprequest.onreadystatechange=function(){ //指定onreadystatechange事件句柄对应的函数 if(httprequest.readyState==4){ //4代表服务器返回完成 if(httprequest.status==200){ //200代表成功了 document.getElementById("text1").value=httprequest.responseText; //responsetext表示服务器返回的文本,还有一种方式是responseXML是为了获取服务器返回的xml } else{ alert("AJAX服务器返回错误!"); } } } httprequest.send(); //在这里才真正的向服务器端发送请求 }
我们用jquery来前台js代码会变得十分简洁:
基于jquery编写的js代码:
注意:HTML代码要把button的onclick事件去掉,因为我们直接在js用了事件绑定。
$(document).ready(function(){ //button1绑定事件 $("#Button1").bind("click",function(){ $.ajax({ url:"Handler.ashx", type:"POST", success:function(data){ //$("#text1").val(data); document.getElementById("text1").value=data; } }); }); });
不得不说jquery“简约而不简单”……
jquery中的$.ajax集合了get、post方法,默认的是get。
如果直接用POST的话,代码更简单
$(document).ready(function(){ //button1绑定事件 $("#Button1").bind("click",function(){ $.post("Handler.ashx",function(data){ document.getElementById("text1").value=data; }); }); });
示例二:
一、XMLHttpRequest实现获取数据
不使用jQuery实现页面不刷新获取内容的方式,我们这里采用XMLHttpRequest原生代码实现;
js代码如下:
//1.获取a节点,并为其添加Oncilck响应函数 document.getElementsByTagName("a")[0].onclick=function(){ //3、创建一个XMLHttpRequest(); varrequest=newXMLHttpRequest(); //4、准备发送请求的数据url varurl=this.href; varmethod="GET"; //5、调用XMLHttpRequest对象的open方法 request.open(method,url); //6、调用XMLHttpRequest对象的send方法 request.send(null); //7、为XMLHttpRequest对象添加onreadystatechange响应函数 request.onreadystatechange=function(){ //8、判断响应是否完成:XMLHttpRequest对象的readystate的属性值为4的时候 if(request.readyState==4){ //9、在判断响应是否可用:XMLHttpRequest对象status属性值为200 if(request.status==200){ //10、响应结果 alert(request.responseText); } } } //2、取消a节点的额默认行为 returnfalse; }
插入HTML代码:
<ahref="hello.txt">点击获取文本内容</a>
二、jQuery实现ajax获取信息
这个例子是动态的从后台获取数据来改变下拉按钮的内容;
js代码如下:
functionbindCarteam0(){ //通过URL请求数据 varURL=<select:linkpage="/xiaoshouwl.do?method=getCarteamList"/>; $.ajax({ url:URL, type:'GET', dataType:"json", success:function(html){ varstr="<optionvalue='-1'>全部</option>"; for(vari=0;i<html.length;i++){ str+="<optionvalue='"+html[i].id+"'>"+html[i].name+"</option>"; } $("#carteam_code").empty().html(str); } }); }
HTML代码如下:
<select:selectproperty="carteam_code"styleId="carteam_code"style="width:150px"> <select:optionvalue="-1">全部</select:option> </select:select>
其中type类型有get和post两种;
post可以传输的数据量比较大,get有字节限制;