.NET运用AJAX 总结及其实例
1、AJAX简介 (1、没有AJAX会怎么样?普通的ASP.Net每次执行服务端方法的时候都要刷新当前页面,比如实现显示服务器的时间。每次都要刷新页面的坏处:页面刷新打断用户操作、速度慢、增加服务器的流量压力。如果没有AJAX,在youku看视频的过程中如果点击了“顶、踩”、评论、评论翻页,页面就会刷新,视频就会被打断。试想一个效果:在YOUKU网看视频,然后看到一个顶踩的功能,看没有ajax会打断视频,然后将按钮用UpdatePanel包起来就不会打断视频了。用HttpWatch看没有AJAX的时候服务器返回的是整个页面,有了AJAX服务器只返回几个按钮的内容。
(2、AJAX(
AsynchronousJavaScript and XML,异步JavaScript和XML)是一种进行
页面局部异步刷新的技术。用AJAX向服务器发送请求和获得服务器返回的数据并且更新到界面中,不是整个页面刷新,而是
在HTML页面中使用JavaScript创建XMLHTTPRequest对象来向服务器发出请求以及获得返回的数据,就像JavaScript版的
WebClient一样,在页面中
由
XMLHTTP
Request
来发出
Http
请求和获得服务器的返回数据,这样页面就不会刷新了。
XMLHTTPRequest是AJAX的核心对象。
2、
XMLHTTPRequest
(1、开发一个AJAX功能需要
开发服务端和客户端两块程序。以一个显示服务端时间为例。首先开发一个GetDate1.ashx,输出当前时间。在HTML页面中放一个按 钮,在按钮的onclick中创建XMLHTTP向GetDate1.ashx发送请求,获得返回的数据并且显示到界面上。下面的代码非常重要,是精华来着,必背:
javascript代码
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml" 3 head 4 title>AJAX01</ 5 script type="text/javascript" 6 function btnClick() { 7 //alert(1); 8 1 创建XMLHTTP对象,相当于WebClient 9 var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP); 10 11 if (!xmlhttp) { 12 alert(创建xmlhttp对象异常); 13 return; 14 } 15 16 2 “准备”01AJAX.ashx发出Post请求。这里还没有发出请求 17 XMLHTTP默认(也推荐)不是同步请求的,也就是open方法并不像WebClient的DownloadString 18 那样把服务器返回的数据拿到才返回, 19 是异步的,因此需要监听onreadystatechange事件 20 21 22 xmlhttp.open(POST,01AJAX.ashx?id=" + encodeURI('AJAX服务器) + &ts= Date(),255)">false23 24 xmlhttp.onreadystatechange () { 25 (xmlhttp.readyState == 4) {readyState == 4 表示服务器返回数据了 26 (xmlhttp.status 200如果状态码为200则是成功 27 接收服务器的返回数据,没有用send的返回值,而是在onreadystatechange事件里来接收 28 document.getElementById(txtTime).value = xmlhttp.responseText; responseText属性为服务器返回的文本 29 } 30 else { 31 alert(AJAX服务器返回错误!32 33 } 34 35 不要以为if(xmlhttp.readyState == 4) 在send之前执行!!!! 36 if (xmlhttp.readyState == 4)只有在服务器返回值以后才会执行,而!!send之后过一会儿服务器才会返回数据 37 xmlhttp.send(); 这时才开始发送请求 38 } 39 script40 41 body42 input ="text" id="txtTime" /> 43 ="button"="btn" value onclick="btnClick()" 44 45 html> ashx代码
(2、不使用UpdatePanel、JQuery等AJAX库编写一个AJAX程序。 也可以在xmlhttp.open中向服务器传递参数:
xmlhttp.open("POST","GetDate1.ashx?id=1&name="+"encodeURL('中国')",false),如果传递给服务器的请求里有中文,则需要使用Javascript函数encodeURI来进行URL编码。
(3、
发出请求后不等服务器返回数据,就继续向下执行,所以不会阻塞,界面就不卡了,这就是AJAX中“A”的含义“异步”。只有在服务器返回值以后才会执
行,而!!
send之后过一会儿服务器才会返回数据。
(4、 xmlhttp.open("
GET",false),如果这样单纯滴传两个静态参数的话,浏览器可能会保持一
种提取缓存的状态,所以最好传一个动态参数,随意一个参数。这是一个AJAX缓冲存在的问题。如果用POST的方式,就不会发生缓冲的问题。
案例1:无刷新异步操作-->汇率转换
html代码
>02 huilv questionsrc="js/jquery-1.4.2.js" type></ 6 ="js/jquery-1.4.2-vsdoc.js" 7 8 btnOnclick() { moneyType $(#selectedID).val(); 10 account #myaccountalert(account); 12 alert(moneyType); 13 14 15 error from create xmlhttp!16 17 18 02汇率问题.ashx?moneyType=&account=19 20 ) { 21 alert(xmlhttp.responseText); 22 23 alert(xmlhttp.responseText); 24 $("#result").text = xmlhttp.responseText; 25 $(#result).val(xmlhttp.responseText); 26 27 xmlhttp.send(); 30 31 32 33 34 35 id="myaccount" name="name"="" 36 select ="selectedID"37 option value="1" selected="selected">dollaroption38 ="2">Japan39 ="3">Hongkong40 select41 ="check"="btnOnclick()" =" "="result"43 > ashx代码
!!!遇到问题总结: ☆$("#result").val(xmlhttp.responseText);将xmlhttp获取得到的文本数据传给val()。 3、JQuery AJAX
(1、newActiveXObject("Microsoft.XMLHTTP")是IE中创建XMLHttpRequest对象的方法。非IE浏览器中创建方法是newXmlHttpRequest()。为了兼容不同的浏览 器需要编写很多代码,下面的兼容浏览器也不是很完整的:
兼容不同浏览器的XMLhttpresquest对象
(2、采用JQueryAJAX方式可以高效化解浏览器问题:JQuery中提供了简化ajax使用的方法。$.ajax()函数是JQuery中提供的ajax访问函数, $.post()是对$.ajax()的post方式提交ajax查询的封装,$.get()是对$.ajax()的get方式提交ajax查询的封装。推荐用post方式,因为post方式没有缓存的问题。 JQuery改进汇率兑换问题
4、练习
练习1:JQuery实现Ajax 根据商品名称自动显示价格
html代码
|