ajax读书笔记(一)

  Ajax Asynchronous JavaScript and XML (以及 DHTML 等)的缩写。这个短语是 Adaptive Path Jesse James Garrett 发明的(请参阅 参考资料 ),按照 Jesse 的解释,这 不是 个首字母缩写词。
1。(1)基于浏览器的应用框架一般分为两种:
·       Aplication frameworks: 提供了浏览器功能,但其最著名的还是在于通过窗口生成组件建立桌面 GUI
·       Infrastructural frameworks: 提供基本的框架功能和轻便式浏览器端操作,让开发者去创建具体应用,主要功能包括:
o        基于 XMLHttpRequest 组件的浏览器交互功能
o        XML 解析和操作功能
o        根据 XMLHttpRequest 的返回信息进行相应的 DOM 操作
o        一些特殊情况下,和其他的浏览器端技术如 Flash (或 Java Applets )等集合到一起应用
  (2)基于服务器端的应用框架通常以下面两种方式工作 ( 尽管它们根据不同的语言进行了分类 )
·       HTML/JS Generation(HTML/JS 生成 ) :通过服务器端生成 HTML JS 代码在传递给浏览器端进行直接运行
·       远程交互: JavaScript 调用服务器端函数 ( 例如调用 Java 函数 ) 并返回给 JavaScript 的回调句柄,或者请求服务器端数据信息,例如 Session 信息,数据库查询等。
  
2。 Ajax 应用程序所用到的基本技术:
·       HTML 用于建立 Web 表单并确定应用程序其他部分使用的字段。
·       JavaScript 代码是运行 Ajax 应用程序的核心代码,帮助改进与服务器应用程序的通信。
·       DHTML Dynamic HTML ,用于动态更新表单。我们将使用 div span 和其他动态 HTML 元素来标记 HTML
文档对象模型 DOM 用于(通过 JavaScript 代码)处理 HTML 结构和(某些情况下)服务器返回的 XML
  
要了解的一个对象可能对您来说也是最陌生的,即 XMLHttpRequest 。这是一个 JavaScript 对象,创建该对象很简单,如 清单 1 所示。

清单 1. 创建新的 XMLHttpRequest 对象
 
<script language="javascript" type="text/javascript">
var xmlHttp = new XMLHttpRequest();
</script>
 
在一般的 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 called phone
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];
 
根据 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;
 }
}
 
同时支持 Internet Explorer 和非 Microsoft 浏览器。 清单 4 显示了这样的代码。

清单 4. 以支持多种浏览器的方式创建 XMLHttpRequest 对象
 
/* Create a new XMLHttpRequest object to 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 && typeof XMLHttpRequest != 'undefined') {
 xmlHttp = new XMLHttpRequest();
}
 
现在先不管那些注释掉的奇怪符号,如 @cc_on ,这是特殊的 JavaScript 编译器命令,将在下一期针对 XMLHttpRequest 的文章中详细讨论。这段代码的核心分为三步:
1.        建立一个变量 xmlHttp 来引用即将创建的 XMLHttpRequest 对象。
2.        尝试在 Microsoft 浏览器中创建该对象:
o         尝试使用 Msxml2.XMLHTTP 对象创建它。
o         如果失败,再尝试 Microsoft.XMLHTTP 对象。
3.        如果仍然没有建立 xmlHttp ,则以非 Microsoft 的方式创建该对象。
最后, xmlHttp 应该引用一个有效的 XMLHttpRequest 对象,无论运行什么样的浏览器。
  发出请求
您已经有了一个崭新的 XMLHttpRequest 对象,现在让它干点活儿吧。首先需要一个 Web 页面能够调用的 JavaScript 方法(比如当用户输入文本或者从菜单中选择一项时)。接下来就是在所有 Ajax 应用程序中基本都雷同的流程:
1.        Web 表单中获取需要的数据。
2.        建立要连接的 URL
3.        打开到服务器的连接。
4.        设置服务器在完成后要运行的函数。
5.        发送请求。
 
清单 5 中的示例 Ajax 方法就是按照这个顺序组织的:

清单 5. 发出 Ajax 请求
 
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.php?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);
}
 
现在要面对服务器的响应了。现在只要知道两点:
·       什么也不要做,直到 xmlHttp.readyState 属性的值等于 4
·       服务器将把响应填充到 xmlHttp.responseText 属性中。
其中的第一点,即就绪状态,将在下一篇文章中详细讨论,您将进一步了解 HTTP 请求的阶段,可能比您设想的还多。现在只要检查一个特定的值( 4 )就可以了(下一期文章中还有更多的值要介绍)。第二点,使用 xmlHttp.responseText 属性获得服务器的响应,这很简单。 清单 6 中的示例方法可供服务器根据 清单 5 中发送的数据调用。

清单 6. 处理服务器响应
 
function updatePage() {
 if (xmlHttp.readyState == 4) {
    var response = xmlHttp.responseText;
    document.getElementById("zipCode").value = response;
 }
}
 
连接 Web 表单
还有什么呢?实际上没有多少了。一个 JavaScript 方法捕捉用户输入表单的信息并将其发送到服务器,另一个 JavaScript 方法监听和处理响应,并在响应返回时设置字段的值。所有这些实际上都依赖于 调用 第一个 JavaScript 方法,它启动了整个过程。最明显的办法是在 HTML 表单中增加一个按钮,但这是 2001 年的办法,您不这样认为吗?还是像 清单 7 这样利用 JavaScript 技术吧。

清单 7. 启动一个 Ajax 过程
 
<form>
 <p>City: <input type="text" name="city" id="city" size="25"
       onChange="callServer();" /></p>
 <p>State: <input type="text" name="state" id="state" size="25"
       onChange="callServer();" /></p>
 <p>Zip Code: <input type="text" name="zipCode" id="city" size="5" /></p>
</form>

当用户在 city state 字段中输入新的值时,callServer()方法就被触发,于是 Ajax 开始运行了。

 

现在您可能已经准备开始编写第一个 Ajax 应用程序了,至少也希望认真读一下 参考资料 中的那些文章了吧?但可以首先从这些应用程序如何工作的基本概念开始,对XMLHttpRequest对象有基本的了解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值