和大家一起讨论一下ajax
ajax出来有几个月了吧,用她做了些东西,觉得还不错,想和大家一起讨论讨论。
首先是open的那几个参数,主要是第一个搞的不是很清楚,"GET","POST" 等各自代表的意义有没有人可以讲的清楚些,http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html 这里面倒是有,可是英文的,总觉得不能完全理解。
还有就是要如何查看返回值的详细内容,在脚本里这样写
var oHttpReq = new ActiveXObject("MSXML2.XMLHTTP");
var oDoc = new ActiveXObject("MSXML2.DOMDocument");
返回之后
result = oHttpReq.responseText;
oDoc.loadXML(result);
要怎样才能看到result和oDoc的内容?
问题点数:100、回复次数:76Top
1 楼pengjie000(痴痴)回复于 2005-10-14 11:01:11 得分 0
alert(result);Top
2 楼shoutor(www.mouxiao.com)回复于 2005-10-14 11:25:59 得分 0
怎么觉得就是xmlhttp呢Top
3 楼swordragon(古道热肠)回复于 2005-10-14 11:26:51 得分 0
看一下我的例子吧:
1、客户端:
function callXMLHttp()
{
var strurl;
var result;
strurl = "XMLHttpServer.aspx?strID=100";
var objHttp = new ActiveXObject("Microsoft.XMLHTTP");
objHttp.open("get", strurl, false);
objHttp.send();
result = objHttp.ResponseText;
}
2、服务器端:
private void Page_Load(object sender, System.EventArgs e)
{
if (Request.QueryString.Keys.Count > 0 && Request.QueryString["strID"].Length > 0)
{
strID = Request.QueryString["strID"].ToString();
}
Response.Write("要返回的值");
}
Top
4 楼swordragon(古道热肠)回复于 2005-10-14 11:28:00 得分 0
还有一种写法:
function Test(objSrc,objDes)
{
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
xmlHttp = new XMLHttpRequest();
}
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
var data = xmlHttp.responseText;
document.getElementById(objDes).value = data;
}
}
}
xmlHttp.open("GET","CodeNameServer.aspx?testid=" + objSrc.value);
xmlHttp.send(null);
}Top
5 楼zeusvenus()回复于 2005-10-14 11:46:26 得分 5
有几个官方的示例也可以看看,另外,前段时间还有个讨论atlas的贴,atlas是微软的ajax技术,楼主可以参考下前段时间sunmast关于atalas的一个讨论贴。
Top
6 楼peterHunter()回复于 2005-10-14 11:47:20 得分 0
swordragon,你说的我都知道,第一个是同步,后面是异步,但是你没有回答我的问题啊
Top
7 楼peterHunter()回复于 2005-10-14 11:50:02 得分 0
如果大家有用过ajax写程序,能不能分享一下,Top
8 楼dushizhuma(杨正祎)回复于 2005-10-14 12:15:13 得分 0
说来惭愧,还没用接触到ajax这个东西...Top
9 楼swordragon(古道热肠)回复于 2005-10-14 14:12:43 得分 10
http://community.csdn.net/Expert/topic/4325/4325818.xml?temp=.9692194Top
10 楼cw888()回复于 2005-10-14 15:22:11 得分 10
介绍一下常用的方法的区别:GET, POST, PUT:不对请大家指正。
名词:Request-URI中"URI"指:统一资源标识符(URI)
1, GET方法取回由Request-URI标识的所有信息。HEAD方法也是取回由Request-URI标识的信息,只是可以在响应时,不返回消息体。
2, POST方法可以请求服务器接收包含在请求中的实体信息,可以用于提交表单,向新闻组、BBS、邮件群组和数据库发送消息。即可只返回表单的局部Form的信息
3, PUT与POST类似,区别是:POST返回带资源的句柄的消息实体,资源中有数据接收的进程,网关,代理,协议等信息。而在PUT时已经知道Request-URI的资源信息,不会再申请资源等。
----------------------------
如:要HTTP的头域包括通用头,请求头,响应头和实体头:
Response.Charset = "GB2312";
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);
等信息是应用:GET方法;
如:只取Form中的信息,或发消息最好用POST;
因为还有安全方面的区别:GET会返回:Request-URI标识的所有信息,网关,代理,日志信息
考虑到安全,请合理使用。
Top
11 楼peterHunter()回复于 2005-10-14 16:12:35 得分 0
我遇到这样的情况,我做2个dropdownlist的联级显示,如果是用oHttpReq.open("POST", "test.aspx")的话,是正常的,如果用oHttpReq.open("GET", "test.aspx")的话,那么主动的dropdownlist中的每个值所对应的内容在被动的那个dropdownlist中只能显示一次,如何解释?Top
12 楼cw888()回复于 2005-10-14 16:17:56 得分 0
没看懂你要说的意思?把显示代码写上来吧Top
13 楼wanghui0380(放歌)回复于 2005-10-14 16:34:17 得分 0
不用ajax
ajax使用js,而asp.net对js控制太弱
同时如果使用ajax,就意味着你将抛弃.net服务器控件,这样asp.net就纯粹成了数据提供者了,你将丧失asp.net大部分功能,实际上有用就只有ado.net这个东东了,算起来这样反而更不方便了
其它语言用ajax,,象asp,php,jsp等因为他们本身就没有服务器控件,所以无所谓了Top
14 楼mathsword(梦在流浪)回复于 2005-10-14 16:47:36 得分 0
把他们输出看不到内容吗?你要看什么?具体点Top
15 楼wanghui0380(放歌)回复于 2005-10-14 16:49:15 得分 0
我还是等着MS 把atlas正式放出来在用好了,现在的ajax实在不适合asp.netTop
16 楼nameldw(安安)回复于 2005-10-14 16:53:22 得分 0
http://www.21ds.net/article/_3/_9/2005-06/01/576_1.html
Ajax内部交流文档Top
17 楼peterHunter()回复于 2005-10-18 09:05:51 得分 0
我说的看不到是指数据的一些结构化的信息,在js里,一般都是用alert作为一个调试工具来查看数据的内容,有没有更好的方法Top
18 楼peterHunter()回复于 2005-10-18 09:22:55 得分 0
如果使用ajax,就意味着你将抛弃.net服务器控件
不同意,我觉得用户体验非常重要,而且使用ajax也不是说就不使用服务器端的功能了,只是不要那么频繁Top
19 楼netren2000()回复于 2005-10-18 09:37:50 得分 0
微软把服务器控件都用xmlhttp传递数据多好!呵呵!!!Top
20 楼xrascal(横刀夺爱)回复于 2005-10-18 09:54:24 得分 0
mark 一下。Top
21 楼aaron_lly(永远,永远,等她回来!)回复于 2005-10-18 10:16:20 得分 0
最近在想,用ajax加asp.net实现跨语言扩展,,,就是用PHP或其他的语言,,可以为asp.net开发出来的产品,提供插件,,,这样就有点像web service 了,,已经想通了,,,但是安全性正在考虑,,,
有兴趣可以一起研究,,,aaronlly@msn.comTop
22 楼menuvb(戏子,白日做梦)回复于 2005-10-18 10:25:11 得分 0
网上现在关于AJAX的网站很多.
这个比较好:http://ajax.schwarz-interactive.de/csharpsample/default.aspxTop
23 楼peterHunter()回复于 2005-10-18 15:43:56 得分 0
aaron_lly你很有想法,愿意一起探讨Top
24 楼peterHunter()回复于 2005-10-18 15:55:48 得分 0
我遇到这样的情况,我做2个dropdownlist的联级显示,如果是用oHttpReq.open("POST", "test.aspx")的话,是正常的,如果用oHttpReq.open("GET", "test.aspx")的话,那么主动的dropdownlist中的每个值所对应的内容在被动的那个dropdownlist中只能显示一次,如何解释?
代码是这样的:
<script>
function load(ClassID){ //ClassID为接收传递的大类编号
var oHttpReq = new ActiveXObject("MSXML2.XMLHTTP");
var oDoc = new ActiveXObject("MSXML2.DOMDocument");
var drp2 = document.getElementById("DropDownList2");
function RemoveAll(oElem) { //清除DropDownList2的所有项
var i = 0;
for (i = oElem.length; i >= 0; i--){
oElem.options.remove(i);
}
}
RemoveAll(drp2);
oHttpReq.open("POST", "getDs.aspx?ClassID="+ClassID, true); //调用读取小类数据的页面,将大类
// 编号值传递过去
oHttpReq.send(null);
oHttpReq.onreadystatechange=function()
{
if (oHttpReq.readyState == 4)
{
if(oHttpReq.status == 200)
{
result = oHttpReq.responseText;
alert(result);
oDoc.loadXML(result);
//99khjkjhk;
items1 = oDoc.selectNodes("//CLASSNAME/Table/ClassName"); //读取所有请求大类所属小类的类名
items2 = oDoc.selectNodes("//CLASSNAME/Table/ClassID"); //读取所有请求大类所属小类的编号
var itemsLength=items1.length;
// var drp2 = document.getElementById("DropDownList2");
for(i=0;i<itemsLength;i++) //将小类的类名和编号赋予DropDownList2
{
var newOption = document.createElement("OPTION");
newOption.text=items1[i].text;
newOption.value=items2[i].text;
drp2.options.add(newOption);
}
}
}
}
}
</script>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:DropDownList id="DropDownList1" style="Z-INDEX: 101; LEFT: 336px; POSITION: absolute; TOP: 176px"
runat="server"></asp:DropDownList>
<asp:DropDownList id="DropDownList2" style="Z-INDEX: 102; LEFT: 432px; POSITION: absolute; TOP: 176px"
runat="server" Width="200px"></asp:DropDownList>
</form>
</body>
DropDownList1 是主动下拉框
DropDownList2 是联动的Top
25 楼peterHunter()回复于 2005-10-18 16:01:16 得分 0
getDs.aspx 是执行查询的页面,如果用 oHttpReq.open("POST", "getDs.aspx?ClassID="+ClassID, true)的话是正常的,如果用 oHttpReq.open("GET", "getDs.aspx?ClassID="+ClassID, true)的话,则联动下拉框只会做一次正确响应,之后就都是空白的,比如DropDownList1 中的 a 对应 DropDownList2 中的 1、2,在第一次点击DropDownList1 中的 a 时,DropDownList2 中出现1和2,但是以后再点击就都没有响应了。Top
26 楼singlepine(小山)回复于 2005-10-18 21:57:17 得分 0
http://community.csdn.net/Expert/topic/4278/4278257.xml?temp=.9855463Top
27 楼hdt(倦怠)回复于 2005-10-18 22:11:24 得分 0
http://www.caae.com.cn/hdt/
Top
28 楼gaofeng2000(高老师)回复于 2005-10-18 22:55:31 得分 0
很感兴趣,有时间一定好好琢磨琢磨Top
29 楼cuike519(I will be back!)回复于 2005-10-18 23:49:54 得分 5
==》ajax出来有几个月了吧
好像已经很久了,只是现在又被抄的很凶而已。
简单的说就是XMLHTTP请求数据,js在客户端画控件。因为XMLHTTP目前大部分的浏览器都支持所以比较有普遍性。.NET下由一个ajax.net框架,有兴趣可以看一看。Top
30 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2005-10-19 01:18:46 得分 30
看了 hdt(近来工作忙,每天只能接分半个小时) 的例子,我也作一个例子对照一下:
http://cqbd.gnway.net/demo_1
我只是用了 asp.net 自从 5 年前产生以来就有的现成的方法,只需要设置一个smartNavigation=true参数而已。当然还有很多传统的其它方法。
源码在: http://cqbd.gnway.net/demo_1/sourcecode.rar
我们会发现,为了一点不起眼的功能化很大代价改造系统其实没有多大效果。而真正需要这类技术的地方(http://wuweihome.dec.cn),远不能用所谓的 Ajax 去做。因为界面上会有很多(上百个)动态生成的相关内容,它们的广泛的相互触发性应当符合传统窗口界面的习惯,可以想象到用Ajax会给页面增加多么沉重的负担。小例子中的功能不能无限上纲,就像不能学了几条汇编语言指令(还根本不能做复杂系统)就开始说汇编才是编程语言。Top
31 楼hdt(倦怠)回复于 2005-10-19 08:18:02 得分 0
我是参照微软的例子用ajax.net做的,代码非常简单。
个人感觉,ajax的优势在于,你可以自己方便详细控制页面提交的时机,和方式
Top
32 楼jhtchina(学习构架设计)回复于 2005-10-19 08:25:59 得分 0
不懂,需要学习 MarkTop
33 楼njbaige(白鸽)回复于 2005-10-19 08:29:51 得分 0
用ajax比用服务器端控件要方便,不刷新页面,不过麻烦在于不能保持控件的状态,包括数值~Top
34 楼adandelion(水源是CSDN最黑的地方,但这个最黑是CSDN一手制造的!)回复于 2005-10-19 08:45:15 得分 0
markTop
35 楼adandelion(水源是CSDN最黑的地方,但这个最黑是CSDN一手制造的!)回复于 2005-10-19 09:45:04 得分 0
我初学ajax,也感觉用处不大举个例子:
三级无刷新DropDownList可以用它做,但很多情况下在每级变换的同时不仅是其子级元素要变化,还要显示显示该级的信息(比如显示在DataGrid中).这时候不刷新刻实现吗?Top
36 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2005-10-19 20:53:58 得分 0
很多不知道使用iframe协同的操作的人都入迷Ajax的简单游戏里边了。因为他们从来没有想过要把一个documeng里边多个控件(包括嵌套在内部的控件)取出来给其它框架交互使用的问题,他们的所谓复杂的项目中只要从Ajax中取出一点简单的内容就很满足了。
另外,这也没有能够取代asp.net传统的(可以看看我上面的回帖)保持屏幕不闪烁的方法,不适合信息系统屏幕(充其量适合简单的jsp或者asp网页)。所谓保持屏幕不闪烁,是指屏幕上“成百上千的控件中任意一个”被操作的时候,整个屏幕不闪烁,不是说屏幕上只有一两个Ajax小区域(没有人敢用大区域,例如半个屏幕,作Ajax例子,因为大区域“也闪烁”),其它地方都静止不动。因此,Ajax没有解决使用的屏幕的闪烁的问题,只是适合静态页面,其中只有非常小的一小块可能变动的情况,当屏幕上有几百个地方需要设计成Ajax的时候,谁能轻松地编程?
自从我今年三四月份到这个板块开始回帖,就惊奇于程序员对smartNavigation的理解程度。我们可以期望web页面的设计可以进化到各个组件(ascx)独立并行装载的时代,但是那个的底层运行机制仍然保持了整个页面的协调一致的状态管理、事件出发顺序等(例如从表的明细一旦改变立刻出发主表的合计一栏的自动刷新显示),ajax绝对是错误的机制,使得本来不太懂asp.net窗体设计的程序员越是深入使用它越是迅速受挫。Top
37 楼singlepine(小山)回复于 2005-10-19 20:57:43 得分 0
Ajax实现无刷新三联动下拉框
http://community.csdn.net/Expert/topic/4337/4337638.xml?temp=.9346277Top
38 楼xcz1943(小钊)回复于 2005-10-19 21:02:35 得分 0
Ajax.dll组件
http://ajax.schwarz-interactive.de/csharpsample/default.aspx
我用这个做了好多例子
但是还没有做过项目Top
39 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2005-10-19 21:10:29 得分 0
那些非asp.net的web程序员,没有类似 smartNavigation 的标准web机制,没有办法,只能使用 Ajax 做类似smartNavigation的事。asp.net程序员,如果没有立刻(设置一下参数就OK)实现全屏幕避免闪烁、保持屏幕焦点(和滚动位置)等等目标,反而开始“研究”Ajax怎么帮助自己的项目解决这些问题,就是大大浪费了宝贵的时间了。
Ajax是爱好者们的有益的探索,但是初学者不应该急功近利地以丢弃了西瓜去抱回芝麻的方式学习。现确保你所有交互界面都有smartNavigation=true才是实在的。Top
40 楼hdt(倦怠)回复于 2005-10-20 08:15:07 得分 30
感觉楼上还没有理解ajax,没有理解asp.net,甚至没有理解b/s
且不说你举的例子用smartnavigation=true与无刷新提交的区别(你的页面在闪,只是位置不动而已),毕竟这只是页面效果的小区别。
b/s是什么:客户端是游览器,服务器端是www服务的网络程序。既然是网络程序必然要牵涉到客户端和服务器之间的交互和客户端与服务器端相互理解,也就是说:1.js要理解.net的数据,2 .net也要理解客户端的数据。现在的asp.net这方面做得并不是很好。尤其是第一条,例如一个服务器端的datatabel,dataview,我做的那个dropdownlist就使用服务器返回一个dataview,js自动通过xml理解这个dataview 并进行下一级的dropdownlist的客户端绑定
ajax用的是xml进行与服务器之间的通信,asp.net基本上用的是viewstate,和页面标记的value,
所以,ajax如果处理得当完全可以实现 js 和 .net 共享数据,
我感觉ajax的主要问题在于游览器的兼容程度
Top
41 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2005-10-20 08:37:44 得分 0
你的页面在闪,只是位置不动而已
------------------------------------------------
说在回帖中说的很明白,要知道装载几千条记录和装载几条记录的区别,要区别在北京和兰州这两个城市的区别,而且我也提供了完整的可执行程序下载。连这个都没有看懂吗?
至于说编程机制的破坏,程序员“责任自负”,我想这个态度太不负责任,至少我可以告诉无辜的人要负什么责任吧?!Top
42 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2005-10-20 08:42:27 得分 0
关于要负的一些开发组织方面的责任,我回在:http://community.csdn.net/Expert/topic/4337/4337638.xml?temp=.871731Top
43 楼hdt(倦怠)回复于 2005-10-20 08:48:11 得分 0
你还是真没理解b/s
Top
44 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2005-10-20 08:48:31 得分 0
“阿Q”式的“我革命了!”的态度其实没有什么好结果。Top
45 楼hdt(倦怠)回复于 2005-10-20 08:55:12 得分 0
我在回帖里早说页面效果是旁支末节。
数据的交互才是关键。
你看不明白吗?
Top
46 楼hdt(倦怠)回复于 2005-10-20 08:57:29 得分 0
而且你注意你的程序里ie的状态栏,那里会暴露,你是在提交
使用ajax就是上网条数据只是会慢,而不会闪
Top
47 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2005-10-20 08:59:15 得分 0
简单指责别人“你不懂xxxx”作为讨论手段其实没有什么意思。因为只要详细读一读相关帖子就知道懂与不懂。
csdn这一点不好,就是不能方便综合查询某一个人的所有回帖,在别的论坛上我经常会这样帮助我了解一下别人作某些论断的出发点。
我并不想去解释我是否懂Ajax、asp.net甚至b/s(真有趣,连这个指责都出来了)。我只是想在尽量短的篇幅中说明尽量清楚的内涵。Top
48 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2005-10-20 09:07:12 得分 0
那里会暴露,你是在提交
------------------------------------------------------------------------------------
我也从一开始说清楚了,提交必须暴露,用户产生“恐惧”而会重复敲击键盘和鼠标。这个是公认的Ajax的问题,到网上google一下几乎所有讨论Ajax问题的地方都有。我主要结合asp.net机制来谈,目的还是让人深入使用asp.net,所以对于那些没有花时间去讨论它对交互界面原则的关系。
关于“是否提交”,这不是什么大秘密。如果我想知道你与服务器怎么通讯,一边轻而易举地在你的服务器上获取不该获取的内容,修改内容,那么我只要看一下客户端代码,因为你是Ajax,一些与数据库和组件服务器的联系都是“大门洞开”的。我上面说了我的讨论宗旨,所以这个我也没有讨论。Top
49 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2005-10-20 09:14:50 得分 0
又把脚本代码下载到客户端有要防止别有用心的人知道你的页面提交了数据,这个想法是不现实的,即使现实也是不重要的不值得为此而付出那么多代价的。Top
50 楼cansum396(漆黑的夜)回复于 2005-10-20 09:18:35 得分 0
作个标记
Top
51 楼RoninBlade(RoninBlade)回复于 2005-10-20 09:45:59 得分 0
mark
Top
52 楼hdt(倦怠)回复于 2005-10-20 10:31:38 得分 0
从一开始说清楚了,提交必须暴露,用户产生“恐惧”而会重复敲击键盘和鼠标。这个是公认的Ajax的问题,到网上google一下几乎所有讨论Ajax问题的地方都有
======================================================================
关键看你怎么处理客户端js。
Top
53 楼hdt(倦怠)回复于 2005-10-20 10:35:06 得分 0
asp.net也是通过页面提交处理,这和ajax在本质上没有区别。一样会有你说安全问题。要避免主要看编程者的功力。
不要把ajax看成只适合做漂亮界面的工具。他是适合整合js和asp.net的一种方法
Top
54 楼Truly()回复于 2005-10-20 10:48:33 得分 5
我以通俗的讲法说一下get,post
1。get方式,http://blabla/blabla.aspx?id=1,把要跟服务器交互的参数作为url参数提交
2。post方式,<form action=http://blabla/blabla.aspx method=post><input id='id'></form>
参数在form中接受并通过form来post到服务器
关于xmlhttp和异步
http://truly.cnblogs.com/archive/2005/08/18/218102.html
http://truly.cnblogs.com/archive/2005/08/31/226648.htmlTop
55 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2005-10-20 11:12:42 得分 0
我们先来打个比方:
假设你在10家保险公司都上保险,如果他们共享资料,那么你需要在一家出示详细的身份、履历、政治、经济等证明资料,其他9家只需要亮出你的身份标识就可以了。如果这10家都各自为战,都要求你自己完整提供资料,那么你的资料泄密的可能性就大了很多倍。
数据库本来可以在过程、表、字段等甚至他们的不同操作方式等极其细的粒度上控制权限。但是有几个人这样做了?我见过很多商品化软件都是假设用户完全是数据库文盲而开发着这些。这是因为这种看似可靠的“推卸过多责任给用户”的方式是很难实用的(不排除有个别人喜欢用)。
asp.net中显露的是什么呢?及其重要的信息也不过“javascript:__doPostBack('_ctl0$_ctl9','')”而已。因为它知道自己去取真正的信息。Top
56 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2005-10-20 11:20:13 得分 0
不是说通过一层一层堆砌起来的代码不能提高安全级。问题是这个堆砌有几人做到了,又有多少人觉得烦而没有做?能不能给我几个web应用的演示地址证明一下?!
最后就回到出发点是否正确的问题。Top
57 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2005-10-20 11:25:31 得分 0
我记得我上面举过一个演示地址说明asp.net应用程序通常会是什么样子。页面上有很多地方都可能成为用户交互的对象,而那些Ajax演示程序过于集中于小点点交互内容了,我提过一个问题:如果页面上需要生成几十、上百个Ajax,谁还愿意做?更何况信息系统有上百个页面。Top
58 楼hdt(倦怠)回复于 2005-10-20 12:04:43 得分 0
不是说通过一层一层堆砌起来的代码不能提高安全级。问题是这个堆砌有几人做到了,又有多少人觉得烦而没有做?能不能给我几个web应用的演示地址证明一下?!
==========================================================
我早说过ajax不适合初学者使用
Top
59 楼qileroro()回复于 2005-10-20 12:12:08 得分 0
转:AJAX的七宗罪
引子
2005.2.18,Jesse James Garrett 的一篇A New Approach to Web Applications引出了AJAX这个web界的新名词。加上新宠儿在降生下来就和足球名队阿贾克斯、Google Suggest Google Maps这些大腕息息相关,不想出名都难啊。但似乎人们给与AJAX的期望有点太高了,甚至有人提出了用AJAX取代Java Applet和Flash。不知Flickr是不是也听到这种呼声才把自己的Flash UI转向了普通的Javascript。AJAX是个伟大的东西,它是在不创造新技术的前提下诞生的一个标准,凭这一点就能招来大批的狂热追随者,AJAX看起来更像是杨过和小龙女练得玉女素心剑一样,分开来没有什么破坏力,但是二者合一就威力无比。
罪之一:对搜索引擎的支持不好
这其实更像一个大大的讽刺,AJAX的鼻祖是Google,但却对Google自己支持最不好了,GMail主界面除过Top和Bottom外没有一个链接就是最形象的讽刺了。虽然Mail本身是个私人的应用系统,但这个无链接的设计界面恰恰给AJAX开了个坏头。Flash也有同样有这个毛病。没有链接的web就像森林中迷路的羔羊,这句看似广告语,其实是web设计的根本原则。
罪之二:编写复杂、容易出错
javascript本是是个轻量级的小东西,现在被强迫重用起来,负担可想而知。javascript对OOP的支持很少,这就限制了javascript代码的可重用可封装等等,从Google Mpa还是其他一些应用中能看到的都是无数的<script src="..."></script>这样的文件包含,这些除了让程序员头昏的更快点,一点好处都没有。更可怕的是在javascript中竟然没有一款顺手的Debug软件,很多写js的老手到今天还是用最原始的alert("")来调试,splinetech JavaScript HTML Debugger 算是一个看起来还像个样子的调试器吧,可惜不是免费的,几十大刀让我这种穷人只能望而生叹了。
罪之三:冗余代码更多了
和上面说的差不多,层层包含js文件是AJAX的通病,再加上以往的很多服务端代码现在放到了客户端,所以每次打开一个页面会包含很多的无用的js文件也一同下载下来。虽然宽带越来越普及,但是减少代码冗余还是每个web设计者的必修课。
罪之四:破坏了Web的原有标准
什么叫破坏web标准?<span onclick="location.href='detail/';">点击查看全部</a>,这就是破坏了web标准。好好的A标签放着不用,偏要用span。这种例子很多,flickr中的标题单击后可以更改,这虽然(也包括我)是大家一致叫好觉得方便的设计,但同时这也是歧义了web元素本身的含义,物是人非这个词不知道用的合不合适?
罪之五:缺少一个没有标准之争、没有back和history的浏览器
哈哈,这句话语有点讽刺意义。现在的浏览器市场,不管是IE还是FireFox还是Opera等等。浏览器和浏览器之间的差异一直都是web设计者心中永远的痛,支持的css不一样,支持的客户端脚本不一样,有的竟然连客户端脚本的用法都有不同。这让程序员非常苦恼,最明显的就是调用xmlhttprequest了,req=(window.XMLHttpRequest)?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP");这段创建xmlhttp对象的代码就是为了适应IE和非IE两天阵营的浏览器的经典例子。说是没有back和没有history的浏览器,这也是一个讽刺,主要是指在AJAX下点击链接是不Redirect页面,所以不存在后退和前进了,同样,没有后退和前进也就无存找浏览历史纪录了。back和history存在的根本就是url的改变,在AJAX下人们发现不改url也同样能达到内容改变这个酷酷的特点,何乐而不为呢?look http://www.dux2005.org/和http://www.zagodesign.com/,我承认这两个站确实做得非常棒,但除了酷酷的感觉外,毫无用处。
罪之六:XML只是用来打幌子
xml从诞生那天起就被一致看好,大有非xml不娶之势,我想Jesse James Garrett也是为了趋于流行才把xml强行加入ajax的吧。xml有一个致命的缺点,那就是加载的资源耗费,这好像是所有平台下xml的通病。google map虽然是Jesse James Garrett推荐的AJAX的品牌代言人,但是gmap并没有用xml,而是用了原生的javascript数组,我自己在用AJAX从服务端传回数据时也从来不用XML,因为它让我更繁琐让系统更慢。服务端首先要调用xml对要传输的数据进行封装,客户端得到数据后再调用xml进行解析,简直是画蛇添足。AJAX的一个重要特点是要身法轻盈,数据的传输尽量单一和简陋,如果确实需要传输大量复杂的数据,也应该通过多次调用传回。
罪之七:世界这么大却找不到自己的家
AJAX适用于什么?能干什么?能带来什么?在网站上用AJAX那是笑话,除非像Google Map和Flickr这样的专业领域的网站外,普通网站根本没必要用这个技术;在庞大的企业应用市场估计还能有AJAX的一点容身之地,不过在MS、SUN不会看着AJAX这个野孩子来在他们的地盘上撒泼的,如果大家都用AJAX,那java给谁卖?.net给谁卖?所以AJAX在企业应用也不是长久之地。所以,AJAX现在找不到自己合适的位置是个很大的尴尬。疑病乱投医,最近把AJAX的矛头指向Flash和Applet就是一个例子。
当然,我也不是要把AJAX扁的一无是处,我本人就非常喜欢这门技术,它能让web设计者的眼球更加宽广,让一些大胆的设计成为现实,但是我也会很冷静的小心翼翼的利用这个利器,利器虽好,一不留神刺伤的是自己。
PS:这篇文章是昨晚写的,今早却神奇般的从网上看见了一篇文章Ajax: 99% Bad,文章是针对2000年那片著名的Flash: 99% Bad 写的,其中的观点和我所说的七宗罪中的几宗相似。
Top
60 楼hdt(倦怠)回复于 2005-10-20 12:19:50 得分 0
人云亦云,没有自己的见解
Top
61 楼qgqchile(qgq)回复于 2005-10-20 12:39:11 得分 0
sp1234(我需要一月有40天) 有些观点是正确的,但也不能完全去否认AJAX的功能
"如果页面上需要生成几十、上百个Ajax,谁还愿意做?更何况信息系统有上百个页面。"
///////////////////////////////
做系统都是要分情况的,好象没谁说过在一个页面上弄上百个AJAX吧更别说上千了
但如果一个页面上真的有那么多控件的话适当的运用AJAX可以避免过大的VIEWSTATE在网络上不必要的传来传去,我想这也是AJAX一个重要优势所在
Top
62 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2005-10-20 13:02:14 得分 0
其实我并没有任何要完全取否认Ajax功能的做法。谁都能看到我针对每一个问题都在建设性地说明asp.net机制是怎么设计这些解决方法的,而不是只是想否定别人的。我想对那些asp或者jsp或者仅仅用javascript写应用系统的人(因为没有深入asp.net机制,所以发现Ajax这个芝麻比传说中的西瓜大),可以在这种区分中了解将来的问题所在。
关于交互性,组件为中心的设计方法是根据需求和业务结构产生的界面,不是像写静态网站的人认为的那样那几百个aspx是手工写成的。如果是一个一个手工写成的,从技术上说,只能自己孤芳自赏。界面是根据业务数据库(这个数据库是广义的,包括xml、反射等体现结构的任何东西)自动生成的,企业中的几百种单据不过是三四种大的格局,只要写几个aspx就可以了,例如:所有的表单都有表头、多个明细部分,明细改变的时候表头部分或者汇总部分会刷新,布局和流程都是标准的,只是字段以及字段的触发机制不同的。楼上说“做系统是要分情况的”我想是指手工作坊方式开发信息系统的时候,一个一个页面分给程序员去做,程序员有“绝对的”权利可以选择只在百分之一的交互地方使用Ajax,我想这个是自相矛盾的。
至于避免ViewState,本来asp.net手册上说的很清楚,只要重载页面的两个方法写上十几行代码就能把ViewState放在服务器端而不输出到客户端。不过这与这里没有什么关系。正因为Ajax没有把程序的意图写入ViewState,没有维护页面的状态,那么asp.net设计交互式窗体的功能与它冲突。不去重复了,可以看 http://community.csdn.net/Expert/topic/4337/4337638.xml?temp=.1246912 的一个例子。
Top
63 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2005-10-20 13:33:30 得分 0
哎!光顾者针对楼主的标题写了。谁知道楼主内容中提出另外一个问题。这里回答一下:
GET命令出现的比较,它的命令就是类似 GET "a.aspx?a=1&b=2" 这种,将参数写到命令文本中的方法。早期的设计可能只考虑到简单下载文件的问题。
但是很快,就增加了POST命令。这是因为企业需要用于一些含有交互的地方,而大多数的操作系统的命令行文本的长度有限制,如果太长就无法传递到服务器。所以POST方式是在 POST "a.aspx"这个命令发送到服务器之后,空两个行,然后再用 a=1 和另外一行 b=2 这样的方式将参数分行传递给服务器,服务器一旦再次发现空两行,才认为POST整体传送(接受)成功。Top
64 楼sp1234(asp.net不是一个语言,是一个操作系统)回复于 2005-10-20 13:39:25 得分 0
如果<Form>用GET方式传递命令,那么动态网页就不够用了。Top
65 楼peterHunter()回复于 2005-10-20 17:12:41 得分 0
上了一天课回来发现有这么回帖,谢谢各位的发言,特别是"40天"和"工作忙",看得出两位都是高手,并且很热心,如果两位有时间,不妨把你们对asp.net的机制的理解(范围更大一点写b/s更好)写文章发表一下,最好能写的深入浅出。
之所以要问这些是因为我是从.net才开始接触b/s,我想有很多和我一样的初学者,对b/s的机制知之甚少。用google当然也可以找到不少资料,不过多而且杂,没有系统性,几位高手既然讨论起来了,不妨都写出来,也算自己的一个总结吧:),斗胆代表各位小鸟写谢过了。
Top
66 楼erictang2003()回复于 2005-10-26 20:13:42 得分 0
ajax 成为了卖个好价钱的有效筹码!Top
67 楼v192(人都是環境逼出來的,所以往死裏逼我吧)回复于 2005-10-26 20:24:04 得分 5
Ajax技术本身应该无可厚非的,但是Ajax.Net这个框架不理想,弄得感觉好像是用JS在调用WebService一样,无法想象应用于正规项目中是一件工作量多么惊人的事情。
不过听朋友说Caslte项目里的Rail好像就不用自己写JS,支持模版方式,那样的话应该还是不错的,我还没时间研究。Top
68 楼haodong2006(今夜无人入眠)回复于 2005-10-27 09:56:05 得分 0
疯狂upTop
69 楼rainbow_wzx()回复于 2005-10-27 12:32:42 得分 0
灌水:我新近建立了一个 ajax 的框架,欢迎大家浏览、测试,并给我建议。
http://easyajax.sourceforge.netTop
70 楼adandelion(水源是CSDN最黑的地方,但这个最黑是CSDN一手制造的!)回复于 2005-10-27 12:36:49 得分 0
sp1234
-------------
UP UP UP UPTop
71 楼eyych(2006)回复于 2005-10-27 12:52:26 得分 0
学习。。。Top
72 楼Aden(Aden)回复于 2005-10-28 10:08:30 得分 0
好贴Top
73 楼huangkc(软贱&henchman)回复于 2005-10-28 11:06:42 得分 0
具体没用过,但不管哪种技术都有两面性
只是看如何于实际中灵活适当的运用
Ajax技术更是一种方法
不过看了这么多回贴,还是长见识了
学习呀,学习Top
74 楼xjtandqt(重在参与)回复于 2005-10-31 16:55:35 得分 0
goodTop
75 楼soft_biao(巴不豆)回复于 2005-11-07 13:24:10 得分 0
markTop
76 楼wwwsyz(zsy)回复于 2006-01-19 20:49:45 得分 0
不用ajax
ajax使用js,而asp.net对js控制太弱
同时如果使用ajax,就意味着你将抛弃.net服务器控件,这样asp.net就纯粹成了数据提供者了,你将丧失asp.net大部分功能,实际上有用就只有ado.net这个东东了,算起来这样反而更不方便了
其它语言用ajax,,象asp,php,jsp等因为他们本身就没有服务器控件,所以无所谓了
其实这个可以结合起来利用它们的一些优点来做.
你看下这个http://tz.yndns.com/controldemo/ZeroAjaxDemo/index.htm
我们只需要对现有的控件实现一个接口,就可以使服务器控件具有Ajax能力,而编码方式
和现在的开发方式没大的区别.
当然用现在的服务端控件也可以,完成.
Top




