那位仁兄,能给我用最简明易懂的道理把AJAX的基本原理说出来.償分200

chenhongxin 2008-07-11 02:43:59
那位仁兄,能给我用最简明易懂的道理把AJAX的基本原理说出来.償分200
...全文
173 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
fxs_2008 2008-07-13
  • 打赏
  • 举报
回复
首要要用到xmlhttp对象,这是一个专门用于通信的对象
原理简单
用xmlhttp对象去请求网页,方式是http的(可以多看看http协议),方式一般为post和get和header
get方式,就是比如在浏览器地址里输入网址,用的就是get
如果点表单提交,一般用的就post方式

请求后返回一个网页(如同我们打一个网页一样),返回的网页的源文件或对象(格式为对象)
解析原文件中的内容并输出

本质上,就是用xmlhttp对象进行http通信
zwd2005 2008-07-12
  • 打赏
  • 举报
回复
从后台拿过来的数据当然是结构化的,json、xml或者你自己能识别的字符串。前台通过js dom操作
syc958 2008-07-12
  • 打赏
  • 举报
回复
ajax就是不须要提交表单就能实现通过提交表单实现的功能!
zhemianshi 2008-07-11
  • 打赏
  • 举报
回复
学习,帮顶!!!
weinaxxc 2008-07-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 neo_yoho 的回复:]
引用 7 楼 weinaxxc 的回复:
引用 5 楼 neo_yoho 的回复:
对回调结果如responseText进行操作啊

恩,我知道要操作,但是我的JS功底很差,如果无刷新翻页,我点第二页,返回的是第二页的数据,是在DATASET里面的,原先就是绑定一下就行了,但是现在我是无刷新返回的,请教如何操作,谢谢拉!我最关心的就是这个!

一般用obj.innerHTMl = xmlhttp.responseText将回调内容反映到当前页面obj区域上去
[/Quote]

这个我当然知道,最简单的用法么,我想问:原先我用DATASET直接绑定一页,但是现在我用异步返回的,这如果来反映这个回调内容,用obj.innerHTMl = xmlhttp.responseText不行的吧!这个异步返回的结果怎么显示成和原来直接绑定一样的结构呢?
weinaxxc 2008-07-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 programfan477976996 的回复:]
处理过程你要看协议了,各浏览器处理方式都不大一样,平时应用中只要明白上面那段话就知道怎么用了,用在什么地方了。比如说用AJAX做添加附件,显示附件列表页A,增加附件页B(由A弹出),只要在B页里用JS获取另一个后台处理页(JSP,ASP)得到的数据再赋给A页里的附件列表控件(在B的onload里赋值),当然页面B还是要刷新的。
[/Quote]
别避重就轻啊,浏览器就拿最普及的IE来说吧,它是怎么处理的呢?我不要什么添加附件什么的,这功能我也能做,我就是问返回大量数据的时候怎么处理。
dh20156 2008-07-11
  • 打赏
  • 举报
回复
AJAX全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),是一种创建交互式网页应用的网页开发技术。
異步,XmlHttpRequest的處理請求方式,也可以使用同步的方式;
XML,服務端返回的數據格式(當然現在多數人在用JSON的數據格式),為什么用這種數據格式,因為它具有DOM結構,很好處理,正好你問怎么處理返回的數據,可以找找XML DOM的參考資料看看;
neo_yoho 2008-07-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 weinaxxc 的回复:]
引用 5 楼 neo_yoho 的回复:
对回调结果如responseText进行操作啊

恩,我知道要操作,但是我的JS功底很差,如果无刷新翻页,我点第二页,返回的是第二页的数据,是在DATASET里面的,原先就是绑定一下就行了,但是现在我是无刷新返回的,请教如何操作,谢谢拉!我最关心的就是这个!
[/Quote]
一般用obj.innerHTMl = xmlhttp.responseText将回调内容反映到当前页面obj区域上去
weinaxxc 2008-07-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 neo_yoho 的回复:]
对回调结果如responseText进行操作啊
[/Quote]
恩,我知道要操作,但是我的JS功底很差,如果无刷新翻页,我点第二页,返回的是第二页的数据,是在DATASET里面的,原先就是绑定一下就行了,但是现在我是无刷新返回的,请教如何操作,谢谢拉!我最关心的就是这个!
  • 打赏
  • 举报
回复
处理过程你要看协议了,各浏览器处理方式都不大一样,平时应用中只要明白上面那段话就知道怎么用了,用在什么地方了。比如说用AJAX做添加附件,显示附件列表页A,增加附件页B(由A弹出),只要在B页里用JS获取另一个后台处理页(JSP,ASP)得到的数据再赋给A页里的附件列表控件(在B的onload里赋值),当然页面B还是要刷新的。
neo_yoho 2008-07-11
  • 打赏
  • 举报
回复
对回调结果如responseText进行操作啊
weinaxxc 2008-07-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 programfan477976996 的回复:]
兄弟,我不去百度搜大把的贴上来,我想把自己的理解用大白话告诉你,是这样的
AJAX就象个小偷,用撬锁工具(JAVASCRIPT)从主人家里的保险柜里(数据库)偷来东西(数据),而主人(浏览器IE或其它)还未察觉(刷新),他已经把东西顺利盗走了(不留痕迹)我Q号:477976996一起交流
[/Quote]

这个我当然明白,但是偷来的东西总要处理的吧,这个东西可以是一个数字,字符串,表格。。我想问的就是怎么来处理呢
weinaxxc 2008-07-11
  • 打赏
  • 举报
回复
这个原理怎么才能解释我的这个帖子里一些人的回答呢?
http://topic.csdn.net/u/20080711/14/03b72a21-945a-42b6-9264-21ba28e34f76.html
  • 打赏
  • 举报
回复
兄弟,我不去百度搜大把的贴上来,我想把自己的理解用大白话告诉你,是这样的
AJAX就象个小偷,用撬锁工具(JAVASCRIPT)从主人家里的保险柜里(数据库)偷来东西(数据),而主人(浏览器IE或其它)还未察觉(刷新),他已经把东西顺利盗走了(不留痕迹)我Q号:477976996一起交流
private_ll 2008-07-11
  • 打赏
  • 举报
回复
Ajax原理详细说明


Ajax 由 HTML、JavaScript、DHTML 和 DOM 组成,这一杰出的方法可以将笨拙的 Web 界面转化成交互性的 Ajax 应用程序。本文的作者是一位 Ajax 专家,他演示了这些技术如何协同工作 —— 从总体概述到细节的讨论 —— 使高效的 Web 开发成为现实。他还揭开了 Ajax 核心概念的神秘面纱,包括 XMLHttpRequest 对象。

但在详细探讨 Ajax 是什么之前,先让我们花几分钟了解 Ajax 做什么。目前,编写应用程序时有两种基本的选择:桌面应用程序、Web 应用程序。两者是类似的,桌面应用程序通常以 CD 为介质(有时候可从网站下载)并完全安装到您的计算机上。桌面应用程序可能使用互联网下载更新,但运行这些应用程序的代码在桌面计算机上。Web 应用程序运行在某处的 Web 服务器上 —— 毫不奇怪,要通过 Web 浏览器访问这种应用程序。

不过,比这些应用程序的运行代码放在何处更重要的是,应用程序如何运转以及如何与其进行交互。桌面应用程序一般很快(就在您的计算机上运行,不用等待互联网连接),具有漂亮的用户界面(通常和操作系统有关)和非凡的动态性。可以单击、选择、输入、打开菜单和子菜单、到处巡游,基本上不需要等待。

另一方面,Web 应用程序是最新的潮流,它们提供了在桌面上不能实现的服务(比如Amazon.com 和 eBay)。但是,伴随着 Web 的强大而出现的是等待,等待服务器响应,等待屏幕刷新,等待请求返回和生成新的页面。

显然这样说过于简略了,但基本的概念就是如此。您可能已经猜到,Ajax 尝试建立桌面应用程序的功能和交互性,与不断更新的 Web 应用程序之间的桥梁。可以使用像桌面应用程序中常见的动态用户界面和漂亮的控件,不过是在 Web 应用程序中。

还等什么呢?我们来看看 Ajax 如何将笨拙的 Web 界面转化成能迅速响应的 Ajax 应用程序吧。

老技术,新技巧

在谈到 Ajax 时,实际上涉及到多种技术,要灵活地运用它必须深入了解这些不同的技术(本系列的头几篇文章将分别讨论这些技术)。好消息是您可能已经非常熟悉其中的大部分技术,更好的是这些技术都很容易学习,并不像完整的编程语言(如 Java 或 Ruby)那样困难。

下面是 Ajax 应用程序所用到的基本技术:

HTML 用于建立 Web 表单并确定应用程序其他部分使用的字段。

JavaScript代码是运行 Ajax 应用程序的核心代码,帮助改进与服务器应用程序的通信。

DHTML或 Dynamic HTML,用于动态更新表单。我们将使用div、span和其他动态 HTML 元素来标记 HTML。

文档对象模型 DOM 用于(通过 JavaScript 代码)处理 HTML 结构和(某些情况下)服务器返回的 XML。

我们来进一步分析这些技术的职责。以后的文章中我将深入讨论这些技术,目前只要熟悉这些组件和技术就可以了。对这些代码越熟悉,就越容易从对这些技术的零散了解转变到真正把握这些技术(同时也真正打开了 Web 应用程序开发的大门)。

XMLHttpRequest 对象

要了解的一个对象可能对您来说也是最陌生的,即XMLHttpRequest。这是一个 JavaScript 对象,创建该对象很简单,如清单 1 所示。

清单 1. 创建新的 XMLHttpRequest对象

<scriptlanguage="javascript" type="text/javascript">

var xmlHttp = new XMLHttpRequest();

</script>

XMLHttpRequest这是处理所有服务器通信的对象。继续阅读之前,先停下来想一想:通过XMLHttpRequest对象与服务器进行对话的是 JavaScript 技术。这不是一般的应用程序流,这恰恰是 Ajax 的强大功能的来源。

在一般的 Web 应用程序中,用户填写表单字段并单击 Submit 按钮。然后整个表单发送到服务器,服务器将它转发给处理表单的脚本(通常是 PHP 或 Java,也可能是 CGI进程或者类似的东西),脚本执行完成后再发送回全新的页面。该页面可能是带有已经填充某些数据的新表单的 HTML,也可能是确认页面,或者是具有根据原来表单中输入数据选择的某些选项的页面。当然,在服务器上的脚本或程序处理和返回新表单时用户必须等待。屏幕变成一片空白,等到服务器返回数据后再重新绘制。这就是交互性差的原因,用户得不到立即反馈,因此感觉不同于桌面应用程序。

Ajax 基本上就是把 JavaScript 技术和XMLHttpRequest对象放在Web 表单和服务器之间。当用户填写表单时,数据发送给一些 JavaScript 代码而不是直接发送给服务器。相反,JavaScript 代码捕获表单数据并向服务器发送请求。同时用户屏幕上的表单也不会闪烁、消失或延迟。换句话说,JavaScript 代码在幕后发送请求,用户甚至不知道请求的发出。更好的是,请求是异步发送的,就是说 JavaScript 代码(和用户)不用等待服务器的响应。因此用户可以继续输入数据、滚动屏幕和使用应用程序。

然后,服务器将数据返回 JavaScript 代码(仍然在 Web 表单中),后者决定如何处理这些数据。它可以迅速更新表单数据,让人感觉应用程序是立即完成的,表单没有提交或刷新而用户得到了新数据。JavaScript 代码甚至可以对收到的数据执行某种计算,再发送另一个请求,完全不需要用户干预!这就是XMLHttpRequest的强大之处。它可以根据需要自行与服务器进行交互,用户甚至可以完全不知道幕后发生的一切。结果就是类似于桌面应用程序的动态、快速响应、高交互性的体验,但是背后又拥有互联网的全部强大力量。

加入一些 JavaScript

得到XMLHttpRequest的句柄后,其他的 JavaScript 代码就非常简单了。事实上,我们将使用 JavaScript 代码完成非常基本的任务:

获取表单数据:JavaScript 代码很容易从 HTML 表单中抽取数据并发送到服务器。

修改表单上的数据:更新表单也很简单,从设置字段值到迅速替换图像。

解析 HTML 和 XML:使用JavaScript 代码操纵 DOM(请参阅 下一节),处理HTML 表单服务器返回的 XML 数据的结构。

对于前两点,需要非常熟悉getElementById()方法,如清单 2 所示。

清单 2. 用 JavaScript 代码捕获和设置字段值

//Get the value of the "phone" field and stuff it in a variable calledphone

var phone = document.getElementById("phone").value;

//Set some values on a form using an array called response

document.getElementById("order").value = response[0];

document.getElementById("address").value =response[1];

这里没有特别需要注意的地方,真是好极了!您应该认识到这里并没有非常复杂的东西。只要掌握了XMLHttpRequest,Ajax应用程序的其他部分就是如 清单 2 所示的简单JavaScript 代码了,混合有少量的 HTML。同时,还要用一点儿 DOM,我们就来看看吧。

以 DOM 结束

最后还有 DOM,即文档对象模型。可能对有些读者来说 DOM 有点儿令人生畏,HTML 设计者很少使用它,即使 JavaScript 程序员也不大用到它,除非要完成某项高端编程任务。大量使用 DOM 的是复杂的 Java 和 C/C++程序,这可能就是 DOM 被认为难以学习的原因。

幸运的是,在 JavaScript 技术中使用 DOM 很容易,也非常直观。现在,按照常规也许应该说明如何使用 DOM,或者至少要给出一些示例代码,但这样做也可能误导您。即使不理会 DOM,仍然能深入地探讨 Ajax,这也是我准备采用的方法。以后的文章将再次讨论 DOM,现在只要知道可能需要 DOM 就可以了。当需要在 JavaScript 代码和服务器之间传递 XML 和改变 HTML 表单的时候,我们再深入研究 DOM。没有它也能做一些有趣的工作,因此现在就把 DOM 放到一边吧。

获取 Request 对象

有了上面的基础知识后,我们来看看一些具体的例子。XMLHttpRequest是Ajax 应用程序的核心,而且对很多读者来说可能还比较陌生,我们就从这里开始吧。从 清单 1 可以看出,创建和使用这个对象非常简单,不是吗?等一等。

还记得几年前的那些讨厌的浏览器战争吗?没有一样东西在不同的浏览器上得到同样的结果。不管您是否相信,这些战争仍然在继续,虽然规模较小。但令人奇怪的是,XMLHttpRequest成了这场战争的牺牲品之一。因此获得XMLHttpRequest对象可能需要采用不同的方法。下面我将详细地进行解释。

使用 Microsoft 浏览器

Microsoft浏览器 Internet Explorer 使用 MSXML 解析器处理 XML(可以通过参考资料 进一步了解 MSXML)。因此如果编写的 Ajax 应用程序要和 Internet Explorer 打交道,那么必须用一种特殊的方式创建对象。

但并不是这么简单。根据 Internet Explorer 中安装的 JavaScript 技术版本不同,MSXML 实际上有两种不同的版本,因此必须对这两种情况分别编写代码。请参阅 清单 3,其中的代码在 Microsoft 浏览器上创建了一个XMLHttpRequest。

清单 3. 在 Microsoft 浏览器上创建 XMLHttpRequest 对象

var xmlHttp = false;

try {

xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");

}catch (e) {

try {

xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

}catch (e2) {

xmlHttp = false;

}

}

您对这些代码可能还不完全理解,但没有关系。当本系列文章结束的时候,您将对 JavaScript 编程、错误处理、条件编译等有更深的了解。现在只要牢牢记住其中的两行代码:

 xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");

 和

 xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");。

这两行代码基本上就是尝试使用一个版本的 MSXML 创建对象,如果失败则使用另一个版本创建该对象。不错吧?如果都不成功,则将xmlHttp变量设为 false,告诉您的代码出现了问题。如果出现这种情况,可能是因为安装了非 Microsoft 浏览器,需要使用不同的代码。

处理 Mozilla 和非 Microsoft 浏览器

如果选择的浏览器不是 Internet Explorer,或者为非 Microsoft 浏览器编写代码,就需要使用不同的代码。事实上就是清单 1 所示的一行简单代码:

var xmlHttp = new XMLHttpRequestobject;。

这行简单得多的代码在 Mozilla、Firefox、Safari、Opera 以及基本上所有以任何形式或方式支持 Ajax 的非 Microsoft 浏览器中,创建了XMLHttpRequest对象。

结合起来

关键是要支持所有浏览器。谁愿意编写一个只能用于 Internet Explorer 或者非 Microsoft 浏览器的应用程序呢?或者更糟,要编写一个应用程序两次?当然不!因此代码要同时支持 Internet Explorer 和非 Microsoft 浏览器。清单 4 显示了这样的代码。

清单 4. 以支持多种浏览器的方式创建 XMLHttpRequest对象

/* Create a new XMLHttpRequest objectto talk to the Web server */

var xmlHttp = false;

/*@cc_on @*/

/*@if(@_jscript_version >= 5)

try {

xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");

}catch (e) {

try {

xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

}catch (e2) {

xmlHttp = false;

}

}

@end@*/



if (!xmlHttp && typeofXMLHttpRequest != 'undefined') {

xmlHttp = new XMLHttpRequest();

}



现在先不管那些注释掉的奇怪符号,如@cc_on,这是特殊的JavaScript 编译器命令,将在下一期针对XMLHttpRequest的文章中详细讨论。这段代码的核心分为三步:

 1. 建立一个变量xmlHttp来引用即将创建的XMLHttpRequest对象。

 2. 尝试在 Microsoft 浏览器中创建该对象:

  o 尝试使用Msxml2.XMLHTTP对象创建它。

  o 如果失败,再尝试Microsoft.XMLHTTP对象。

 3. 如果仍然没有建立xmlHttp,则以非 Microsoft 的方式创建该对象。

 最后,xmlHttp应该引用一个有效的XMLHttpRequest对象,无论运行什么样的浏览器。

52,799

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧