我是农民吗?是的,我是。我真的是农民吗?是的,绝对是的。因为我是我爹的儿子,我爹是农民,所以我也是。这不是废话吗?是的,的确是废话。每次写blog之前如果不说几句废话,心里就憋屈的很,就如同有人不在大家面前提一些生动的概念(如AJAX、SOA等)就不足以证明他是高手一样。虽然我刚才也提了一次,不过我绝对不是什么高手,真的,我是一个农民!
(一堆废话)
不过农民也是享有对新知识、新技术的知晓权的,哈哈!
1. 什么是AJAX?我可以知道吗?可以。AJAX就是异步的JavaScript和XML...技术,要看英文怎么写,劳驾您请自己上网查。
2. 什么是异步呢?异步就是不同步,什么又是同步呢?同步就是如果你给我一拳,我接着立即还你一脚。明白了没?不明白赶紧上网搜哦。
3.
什么时候用到异步技术呢? 比如我在打麻将,老婆揪着我的耳朵让我回家烧饭。客气的,我就对雀友说一声:“本人要去做饭。需要30分钟,请等待!”,不客气的,直接就把雀友给撂桌上了。都说小赌可以怡情,大赌可以发家致富,可是你说就这习气,久而久之谁还跟我打牌,我到哪里去怡情、致富呀?终于有一天,我花了血本买了个电饭锅。从此得解放呀!一边打麻将,一边等吃饭。各位,电饭锅的工作原理不需要我解释了吧?
到此,我能不能说AJAX就是我的那只电饭锅呢?因为它,我得了“2006年度小区最积极雀友奖” ,“2006年读小区最优秀家庭妇男奖”等等,还有好多奖状我还没来得及领呢?
你是不是不禁想问-AJAX具体怎么实现呀?如果你真这样想,那你就想对了。因为我下面正想讲这个问题,虽然我只是个农民,不是电气工程师,但家里螺丝刀什么的还是有的呀,拆呀!把那只锅拆了看看。
别心疼,旧的不去新的不来,作为一个农民,这点气度我还是有的。废..废.废什么话呀,讲AJAX呢?严肃点!
首先找了一个比较著名的开源框架MagicAjax看,整个代码不算多,不过除了核心我不想知道其它的东西。记住,AJAX是概念,不是编程语言、更不是一个dll。没有具体的实现标准。总结一下MagicAjax的实现方法,包括一下几点:
1. 通过JS截获客户端的HTML元素的事件,如FORM, INPUT等。
2.放弃默认的浏览器行为。
3.打包截获到的事件上下文。
4.通过HTTP对象把打包的内容向服务器提交。
5.服务器预先截获客户端到来的数据包,并做相应处理。
6.当服务端将要发送Response数据给客户端时,进行再次截获,更改这些数据。
7.客户端HTTP对象收到Response数据进行处理(不是浏览器处理),主要是通过DOM操作特定ID的HTML元素。
MagicAjax的指导思想是:总是通过透明的截获用户调用的方式处理正常的ASP.NET的逻辑。
以下是在ASP.NET环境下,关于最简单的AJAX实现的代码。
AJAX CORE
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->1//*******************************************************
2//JScript:onlyforie
3//Author:wzcheng
4//Mail:wzcheng@iflytek.com
5//*******************************************************
6
7//全局的ajax管理对象
8var_gAjax=newAjax();
9var_submitting;
10
11
12//构造函数
13functionAjax()
14{
15this.HttpHandle=newActiveXObject("Microsoft.XMLHTTP");
16}
17
18//监视文档元素的行为
19Ajax.prototype.WatchElement=function(eid)
20{
21varelement=document.getElementById(eid);
22
23if(element!=null&&element.attachEvent)
24element.attachEvent("onsubmit",this.OnSubmit);
25}
26
27//文档元素的提交事件,提交的HTTP行为是POST
28Ajax.prototype.OnSubmit=function(e)
29{
30if(!_submitting)
31{
32_submitting=true;
33
34//取消提交动作
35e.returnValue=false;
36
37varsrcElement=e.srcElement;
38
39_gAjax.MarshalRequest(srcElement);
40
41if(srcElement.fireEvent)
42{
43//继续OnSubmit触发事件
44srcElement.fireEvent("OnSubmit");
45}
46
47_submitting=false;
48}
49
50}
51
52
53//列集客户端请求,即把原本通过正常渠道发送的数据进行打包
54Ajax.prototype.MarshalRequest=function(source)
55{
56vartarget=source.action;
57
58varelemCount=source.elements.length;
59
60varhttpContent="";
61for(vari=0;i<elemCount;i++)
62{
63vareName=source.elements[i].name;
64vareVal=source.elements[i].value;
65
66
67httpContent+=this.EncodePostData(eName);
68httpContent+="=";
69httpContent+=this.EncodePostData(eVal);
70
71if(i<elemCount-1)
72httpContent+="&";
73}
74
75varhttp=this;
76this.HttpHandle.open("POST",target,true);
77this.HttpHandle.onreadystatechange=function(){http.ReadyStateChange();};
78this.HttpHandle.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
79this.HttpHandle.send(httpContent);
80
81}
82
83//给客户端数据进行编码
84Ajax.prototype.EncodePostData=function(data)
85{
86returndata.split("%").join("%25").split("=").join("%3d").split("&").join("%26").split("+").join("%2b");
87}
88
89//Http请求状态变化的通知函数
90Ajax.prototype.ReadyStateChange=function(data)
91{
92if(this.HttpHandle.readyState==4)
93{
94if(this.HttpHandle.status==200)
95{
96varhtml=this.HttpHandle.responseText;
97
98varendIdx=this.HttpHandle.responseText.indexOf("\r\n\r\n");
99
100if(endIdx>0)
101{
102varscript=html.substring(0,endIdx);
103
104eval(script);
105}
106}
107}
108}
109
110//设置元素的新值
111Ajax.prototype.SetElement=function(eid,attName,attVal)
112{
113varelement=document.getElementById(eid);
114
115if(element!=null)
116{
117element.setAttribute(attName,attVal);
118}
119}
120
以下是调用上面脚本的ASPX页面代码:
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><%@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>
</head>
<body>
<scriptsrc="ajax.js"type="text/javascript"></script>
<formid="form1"runat="server">
<div>
<asp:TextBoxID="TextBox1"runat="server"Width="661px">Ajax的核心技术演示</asp:TextBox><br/>
<asp:TextBoxID="htmlTbx"runat="server"Width="660px"></asp:TextBox>
<asp:ButtonID="Button1"runat="server"Text="Button"OnClick="Button1_Click1"/>
</div>
<scripttype="text/javascript">
_gAjax.WatchElement("form1");
</script>
</form>
</body>
</html>
和上面对应的后代码:
相关推荐
AJAX AJAX AJAX AJAX AJAX AJAX AJAX AJAX AJAX
ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件
ajax特效ajax特效ajax特效ajax特效ajax特效ajax特效ajax特效ajax特效ajax特效ajax特效ajax特效ajax特效ajax特效ajax特效ajax特效ajax特效ajax特效ajax特效ajax特效ajax特效ajax特效
ajax ajax原理 ajax代码 ajax编程 ajax学习
ajax详解ajax详解ajax详解 ajax详解ajax详解ajax详解 ajax详解ajax详解ajax详解 ajax详解ajax详解ajax详解
ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件ajax控件...
ajax例子ajax例子ajax例子ajax例子ajax例子ajax例子ajax例子ajax例子ajax例子ajax例子ajax例子ajax例子ajax例子ajax例子
Ajax Ajax本质 Ajax本质源码 Ajax Ajax本质 Ajax本质源码 Ajax Ajax本质 Ajax本质源码
ajax上传ajax上传ajax上传ajax上传ajax上传
ajax 分页ajax 分页ajax 分页
AJAX实战AJAX实战AJAX实战AJAX实战AJAX实战AJAX实战AJAX实战AJAX实战
three ajax ajax ajaxthreethree ajax ajax ajax ajax ajax ajax three ajax ajax ajax
Ajax开发包Ajax开发包Ajax开发包Ajax开发包Ajax开发包Ajax开发包Ajax开发包Ajax开发包Ajax开发包Ajax开发包
关于Ajax的常见面试题 1,Ajax和javascript的区别? javascript是一种在浏览器端执行的脚本语言,Ajax是一种创建交互式网页应用的开发技术 ,它是利用了一系列相关的技术其中就包括javascript。 Javascript是由...
ajax 宝典 ajax 宝典 ajax 宝典 ajax 宝典
Ajax组件Ajax组件Ajax组件Ajax组件
AJAX 指异步 JavaScript 及 XML(Asynchronous JavaScript And XML)。 国 [使用ajax 构建应用程序] 使用ajax 构建应用程序 内翻译常为“阿贾克斯”和阿贾克斯足球队同音。Web应用的交互如Flickr,Backpack和...
json ajax ajax框架 json ajax ajax框架
AJAX 源码AJAX 源码AJAX 源码AJAX 源码AJAX 源码AJAX 源码AJAX 源码AJAX 源码AJAX 源码AJAX 源码
ajax理论说明ajax理论说明ajax理论说明ajax理论说明ajax理论说明ajax理论说明ajax理论说明ajax理论说明ajax理论说明ajax理论说明ajax理论说明ajax理论说明ajax理论说明ajax理论说明ajax理论说明ajax理论说明ajax理论...