发新话题
打印

AJAX教程(一) 认识AJAX

本主题由 sese53 于 2008-5-5 12:20 移动

AJAX教程(一) 认识AJAX

AJAX教程(一) 认识AJAX

这是我第一次公开讲课,讲的不好,还请大家多多批评和指点.^_^

从今天起,我们将一起学习AJAX(异步的JavaScript 和 XML),它是一种能够实现页面部分刷新,避免每次请求数据而使整个页面重新刷新,提高访问速度的技术.

在正式介绍AJAX之前,我们先来看AJAX的前身,远程脚本访问(Remote Scripting)技术就可以实现无刷新更新当前页面的内容.实现远程脚本的通常做法包括将脚本与一个IFrame(通常设置成不可见,或者将它的width和height属性设置为0)结合,以及由服务器返回JavaScript,然后再在浏览器中运行这个JavaScript.

下面我们来看一个使用远程脚本的例子,在clint.html中,我们定义了一个本地函数handleResponse()(请暂时允许我们将属于本页的函数成为本地函数,与此对应的称服务器上返回的函数成为远程函数),在其内部只是先简单的alert出一段文本.其实,这个函数我们可以写的更加复杂,更加有实际意思和有趣(可以解析服务器返回的数据,并显示在网页中,在这里不属于我们所要讨论的重点,相关实现已经过期,如果有兴趣的话可以参考:http://www.ashleyit.com/rs/main.htm).
[code name=远程脚本访问演示]

好了,看完了这个远程脚本,下面我们来重点介绍AJAX.
前面已经提到, AJAX 不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的 Web 应用程序的技术。

AJAX = 异步 JavaScript 及 XML(Asynchronous JavaScript and XML)

通过 AJAX,您的 JavaScript 可使用 JavaScript 的 XMLHttpRequest 对象来直接与服务器进行通信。通过这个对象,您的 JavaScript 可在不重载页面的情况与 Web 服务器交换数据。
AJAX 在浏览器与 Web 服务器之间使用异步数据传输(HTTP 请求),这样就可使网页从服务器请求少量的信息,而不是整个页面。
AJAX 可使因特网应用程序更小、更快,更友好。
AJAX 是一种独立于 Web 服务器软件的浏览器技术
我们来研究下AJAX这么好的一种技术,到底与我们平时用到的哪些技术相关呢?
AJAX 基于下列 Web 标准:JavaScript ,XML ,HTML ,CSS.
当然,要学好AJAX并不是一天两天的事情,需要我们不断的学习,利用先前的知识、自己丰富的想象能力和创造能力,我们会创建出一个更好的AJAX应用来的。

我们学习AJAX为了什么 ?

Web 应用程序较桌面应用程序有诸多优势;它们能够涉及广大的用户,它们更易安装及维护,也更易开发。不过,因特网应用程序并不像传统的桌面应用程序那样完善且友好。
通过 AJAX,因特网应用程序可以变得更完善,更友好。

AJAX 如何与服务器进行通信?

在传统的 JavaScript 编程中,假如您希望从服务器上的文件或数据库中得到任何的信息,或者向服务器发送信息的话,就必须利用一个 HTML 表单向服务器 GET 或 POST 数据。而用户则需要单击“提交”按钮来发送/获取信息,等待服务器的响应,然后一张新的页面会加载结果。
由于每当用户提交输入后服务器都会返回一张新的页面,传统的 web 应用程序变得运行缓慢,且越来越不友好。
通过利用 AJAX,您的 JavaScript 会通过 JavaScript 的 XMLHttpRequest 对象,直接与服务器来通信
通过使用 HTTP 请求,web 页可向服务器进行请求,并得到来自服务器的响应,而不加载页面。用户可以停留在同一个页面,他或她不会注意到脚本在后台请求过页面,或向服务器发送过数据。

什么是XMLHttpRequest 对象?

通过使用 XMLHttpRequest 对象,web 开发者可以做到在页面已加载后从服务器更新页面!
在 2005 年 AJAX 被 Google 推广开来(Google Suggest)。
Google 建议使用 XMLHttpRequest 对象来创建一种动态性极强的 web 界面:当您开始在 Google 的搜索框中输入查询时,JavaScript 会向某个服务器发出这些字词,然后服务器会返回一系列的搜索建议。
XMLHttpRequest 对象得到下列浏览器的支持:Internet Explorer 5.0+、Safari 1.2、Mozilla 1.0 / Firefox、Opera 8+ 以及 Netscape 7。
下面为大家罗列出来XMLHttpRequest接口的所有属性和方法。
复制内容到剪贴板
代码:
interface XMLHttpRequest {
  // 事件处理器
  attribute EventListener onreadystatechange;

  // 状态
  const unsigned short UNSENT = 0; //未发送状态
  const unsigned short OPENED = 1; //打开到服务器的连接
  const unsigned short HEADERS_RECEIVED = 2; //收到服务器返回的头部信息
  const unsigned short LOADING = 3; //加载并处理服务器返回数据
  const unsigned short DONE = 4; //处理完毕
  readonly attribute unsigned short readyState;//此处定义一个状态变量

  // 请求部分
  void open(in DOMString method, in DOMString url);
  void open(in DOMString method, in DOMString url, in boolean async);
  void open(in DOMString method, in DOMString url, in boolean async, in DOMString user);
  void open(in DOMString method, in DOMString url, in boolean async, in DOMString user, in DOMString password);
  void setRequestHeader(in DOMString header, in DOMString value);
  void send();
  void send(in DOMString data);
  void send(in Document data);
  void abort();

  // 响应部分
  DOMString getAllResponseHeaders();
  DOMString getResponseHeader(in DOMString header);
  readonly attribute DOMString responseText;
  readonly attribute Document responseXML;
  readonly attribute unsigned short status;
  readonly attribute DOMString statusText;
};
下面我们来分析这个接口,相信大家对其中的一些属性和方法不是很陌生的。

{$对AJAX的属性和方法进行分析部分,待补充}


[code name="远程脚本访问演示"]
复制内容到剪贴板
代码:

<!--@description:clint.html-->
<html>
  <head>
   <title>远程脚本访问演示--clint.html</title>
   <script type=”text/javascript”>
    function handleResponse(){
     alert(“This function is called by the server.html”);
    }
</script>
  </head>
  <body>
   <a href=”server.html” target=”rsFrame”>点击调用服务器端函数</a>
   <iframe border=”0” width=”0” height=”0” name=”rsFrame”></iframe>
  </body>
</html>

<!--@description:server.html-->
<!--@note:server.html完全可以是服务器上返回的一个JavaScript函数。注意下window.parent的用法,可以藉此发挥。-->
<html>
  <head>
   <title>远程脚本访问演示--server</title>
   <script type=”text/javascript”>
    window.parent.handleResponse();
   </script>
  </head>
  <body>
  </body>
</html>
[ 本帖最后由 lnight 于 2008-3-19 16:01 编辑 ]
世界没有公道,要做就做最好,步步高.

TOP

悄悄地顶一下,很不错的说!  

建议转移到 培训班 模块下
声誉好得令人发指,人格闪亮得让人嫉妒!

TOP

引用:
原帖由 会笑的猪 于 2008-3-19 10:36 发表
悄悄地顶一下,很不错的说!  

建议转移到 培训班 模块下
等XXXX用完早膳,让他开个分板块再转移.
世界没有公道,要做就做最好,步步高.

TOP

顶一个先
然后讲讲我的建议哈。
如果是第一次介绍的,我想也许先用个小例子来吸引下不认识ajax的人,会比较好吧。。太多概念的话,反而会吓到人。

另外你的“远程脚本访问演示”,我不是看的很懂。和ajax有关吗?

TOP

引用:
原帖由 野兽 于 2008-3-19 15:38 发表
顶一个先
然后讲讲我的建议哈。
如果是第一次介绍的,我想也许先用个小例子来吸引下不认识ajax的人,会比较好吧。。太多概念的话,反而会吓到人。

另外你的“远程脚本访问演示”,我不是看的很懂。和ajax有关吗? ...
嗯,是的,远程脚本访问,这里为了简单期间,我们只是用到了本地不同的两个文件来模拟,那个server.html 就是模拟的从服务器上返回的信息的。

因为
<a href="这里可以设置一个服务器上的URL".....
它会引导在rsFrame中加载我们请求的页面,在rsFrame中 ,我们可以处理从服务器中“拿”出来的数据。
然后,window.parent.handlerResponse 中编写一个对rsFrame中的数据进行分析处理的过程,并使用innserHTML属性来设置最后的内容
欢迎有不明白的地方继续提问。方便我继续整理我的“处女作”。
世界没有公道,要做就做最好,步步高.

TOP

先顶一个先,感觉这个版块的东西越来越多了。慢慢的都看不完了。但是MARS那块PHP,我还是以他的那个为主线。

TOP

呵呵,内容是一点一点的丰富起来的,我们所准备的都是与PHP Web开发相关技术的。
世界没有公道,要做就做最好,步步高.

TOP

ajax真的制作者会用到么?

TOP

额,,,什么意思啊?不明白。
世界没有公道,要做就做最好,步步高.

TOP

当然会用到...看看网易的邮箱吧!登录的时候会看到

TOP

另外,ajax对提高页面速度也能起到很大的作用

TOP

引用:
原帖由 silency 于 2008-3-25 22:37 发表
另外,ajax对提高页面速度也能起到很大的作用
这不是主要的,主要的是要网页能像本地软件一样用起来那么舒服,那么人性化
战神一出,谁与争锋。

TOP

曾不知道在哪里看到过说ajax会增加服务器的负担

不知道是到底增加不增加,增加的话严不严重(个人初级认为应该是减低服务器的负担啊

怎么想都是比从新刷下页面负担来的小 )

不是特别的好服务器会有影响吗?

[ 本帖最后由 PHP杰 于 2008-5-5 18:32 编辑 ]
我相信我自己!
这种相信源自于你们!

TOP

好文章~
很有营养~
这下可是足足的冲了一回电。
啥时候出二啊???

TOP

引用:
原帖由 kingsoft01 于 2008-5-9 09:13 发表
好文章~
很有营养~
这下可是足足的冲了一回电。
啥时候出二啊???
尽快吧...有时间就整理下
世界没有公道,要做就做最好,步步高.

TOP

讲的很不错哟。慢慢学习。不会再请教~~~~

TOP

回复 1# 的帖子

不错哦,写的很好,有概念也有例子,大部分都看懂了,多多少少了解了一点ajax的东西。
支持你!!!
再接再厉哦!

TOP

我比较迟钝,我只明白了一点,它可以使客户端与服务器交互时,不用在整个页面都要刷新了,

TOP

发新话题