您的位置:首页 > 其它

Ajax学习(1)---Ajax 入门简介

2012-01-15 02:06 281 查看
======================================================

注:本文源代码点此下载

======================================================

学习目的:理解 ajax 及其工作原理,构建网站的一种有效方法

.
ajax 是 asynchronous javascript and xml(以及 dhtml 等)的缩写.
下面是 ajax 应用程序所用到的基本技术:
• html 用于建立 web 表单并确定应用程序其他部分使用的字段。
• javascript 代码是运行 ajax 应用程序的核心代码,帮助改进与服务器应用程序的通信。
• dhtml 或 dynamic html,用于动态更新表单。我们将使用 div、span 和其他动态 html 元素来标记 html。
• 文档对象模型 dom 用于(通过 javascript 代码)处理 html 结构和(某些情况下)服务器返回的 xml。
从上面可以看出,ajax不是什么新的技术,而是几个老的技术通过新的方法结合起来,从而实现了新的效果!很多事物都是多元化的,可以说ajax是一个新技术,也可以说ajax是一个新的思路,一个新的架构!
ajax的基本工作原理及流程:
在一般的 web 应用程序中,用户填写表单字段并单击 submit 按钮。然后整个表单发送到服务器,服务器将它转发给处理表单的脚本(通常是 php 或 java,也可能是 cgi 进程或者类似的东西),脚本执行完成后再发送回全新的页面。该页面可能是带有已经填充某些数据的新表单的 html,也可能是确认页面,或者是具有根据原来表单中输入数据选择的某些选项的页面。当然,在服务器上的脚本或程序处理和返回新表单时用户必须等待。屏幕变成一片空白,等到服务器返回数据后再重新绘制。这就是交互性差的原因,用户得不到立即反馈,因此感觉不同于桌面应用程序。
ajax 基本上就是把 javascript 技术和 xmlhttprequest 对象放在 web 表单和服务器之间。当用户填写表单时,数据发送给一些 javascript 代码而不是 直接发送给服务器。相反,javascript 代码捕获表单数据并向服务器发送请求。同时用户屏幕上的表单也不会闪烁、消失或延迟。换句话说,javascript 代码在幕后发送请求,用户甚至不知道请求的发出。更好的是,请求是异步发送的,就是说
javascript 代码(和用户)不用等待服务器的响应。因此用户可以继续输入数据、滚动屏幕和使用应用程序。
然后,服务器将数据返回 javascript 代码(仍然在 web 表单中),后者决定如何处理这些数据。它可以迅速更新表单数据,让人感觉应用程序是立即完成的,表单没有提交或刷新而用户得到了新数据。javascript 代码甚至可以对收到的数据执行某种计算,再发送另一个请求,完全不需要用户干预!这就是 xmlhttprequest 的强大之处。它可以根据需要自行与服务器进行交互,用户甚至可以完全不知道幕后发生的一切。结果就是类似于桌面应用程序的动态、快速响应、高交互性的体验,但是背后又拥有互联网的全部强大力量。
xmlhttprequest 对象:
open():建立到服务器的新请求。
send():向服务器发送请求.
abort():退出当前请求。
readystate:提供当前 html 的就绪状态。
responsetext:服务器返回的请求响应文本。
由于前两年的浏览器大战,使得各种浏览器获得 xmlhttprequest 对象采用的方法有所不同。
支持多种浏览器的方式创建 xmlhttprequest 对象




code
var xmlhttp = false;
try {
xmlhttp = new activexobject("msxml2.xmlhttp");
} catch (e) {
try {
xmlhttp = new activexobject("microsoft.xmlhttp");
} catch (e2) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof xmlhttprequest != 'undefined') {
xmlhttp = new xmlhttprequest();
}
这段代码的核心分为三步:
1. 建立一个变量 xmlhttp 来引用即将创建的 xmlhttprequest 对象。
2. 尝试在 microsoft 浏览器中创建该对象:
尝试使用 msxml2.xmlhttp 对象创建它。
如果失败,再尝试 microsoft.xmlhttp 对象。
3. 如果仍然没有建立 xmlhttp,则以非 microsoft 的方式创建该对象。
最后,xmlhttp 应该引用一个有效的 xmlhttprequest 对象,无论运行什么样的浏览器。
ajax中的请求/响应
发出请求:ajax 应用程序中基本相同的流程:
1. 从 web 表单中获取需要的数据。
2. 建立要连接的 url。
3. 打开到服务器的连接。
4. 设置服务器在完成后要运行的函数。
5. 发送请求。




code
function callserver() {
// get the city and state from the web form
var city = document.getelementbyid("city").value;
var state = document.getelementbyid("state").value;
// only go on if there are values for both fields
if ((city == null) || (city == "")) return;
if ((state == null) || (state == "")) return;
// build the url to connect to
var url = "/scripts/getzipcode.aspx?city=" + escape(city) + "&state=" + escape(state);
// open a connection to the server
xmlhttp.open("get", url, true);
// setup a function for the server to run when it's done
xmlhttp.onreadystatechange = updatepage;
// send the request
xmlhttp.send(null);
}
处理响应:
readystate可能返回的值:
0:请求未初始化(还没有调用 open())。
1:请求已经建立,但是还没有发送(还没有调用 send())。
2:请求已发送,正在处理中(通常现在可以从响应中获取内容头)。
3:请求在处理中;通常响应中已有部分数据可用了,但是服务器还没有完成响应的生成。
4:响应已完成;您可以获取并使用服务器的响应了。
必须知道两点:
1.什么也不要做,直到 xmlhttp.readystate 属性的值等于 4。
2.服务器将把响应填充到 xmlhttp.responsetext 属性中。
响应函数:




code
function updatepage() {
if (xmlhttp.readystate == 4) {
var response = xmlhttp.responsetext;
document.getelementbyid("zipcode").value = response;
}
}
开始的代码使用基本 javascript 代码获取几个表单字段的值。然后设置一个 asp 脚本作为链接的目标。要注意脚本 url 的指定方式,city 和 state(来自表单)使用简单的 get 参数附加在 url 之后。
然后打开一个连接,这是您第一次看到使用 xmlhttprequest。其中指定了连接方法(get)和要连接的 url。最后一个参数如果设为 true,那么将请求一个异步连接(这就是 ajax 的由来)。如果使用 false,那么代码发出请求后将等待服务器返回的响应。如果设为 true,当服务器在后台处理请求的时候用户仍然可以使用表单(甚至调用其他 javascript 方法)。
xmlhttp(要记住,这是 xmlhttprequest 对象实例)的 onreadystatechange 属性可以告诉服务器在运行完成 后(可能要用五分钟或者五个小时)做什么。因为代码没有等待服务器,必须让服务器知道怎么做以便您能作出响应。在这个示例中,如果服务器处理完了请求,一个特殊的名为 updatepage() 的方法将被触发。
最后,使用值 null 调用 send()。因为已经在请求 url 中添加了要发送给服务器的数据(city 和 state),所以请求中不需要发送任何数据。这样就发出了请求,服务器按照您的要求工作。
简单总结的ajax的工作流程:
javascript获得要向服务器段传递的参数或变量,然后利用创建的xmlhttprequest 对象发送个服务器段,如果服务器端接受数据并返回数据,则保存在responsetext 属性中,最后通过javascript修改dom,从而实现在客户端无刷新的修改数据。
参考资料:http://www.ibm.com/developerworks/cn/xml/wa-ajaxintro1.html

======================================================

在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定
这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: