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代码
(3、
发出请求后不等服务器返回数据,就继续向下执行,所以不会阻塞,界面就不卡了,这就是AJAX中“A”的含义“异步”。只有在服务器返回值以后才会执
行,而!!
send之后过一会儿服务器才会返回数据。
(4、 xmlhttp.open("
GET",false),如果这样单纯滴传两个静态参数的话,浏览器可能会保持一
案例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代码
!!!遇到问题总结:
☆xmlhttp.open("POST","02" + encodeURI('汇率问题') + ".ashx?moneyType=" + moneyType + "&account=" + account + "&ts=" + new Date(),false);这句代码中,用到中文字符都要用encodeURl来转化字符类型,不仅仅是参数,页面名称亦如是。
☆$("#result").val(xmlhttp.responseText);将xmlhttp获取得到的文本数据传给val()。
3、JQuery AJAX
(1、newActiveXObject("Microsoft.XMLHTTP")是IE中创建XMLHttpRequest对象的方法。非IE浏览器中创建方法是newXmlHttpRequest()。为了兼容不同的浏览 器需要编写很多代码,下面的兼容浏览器也不是很完整的: