Ajax 是 Asynchronous JavaScript and XML(以及 DHTML 等)的缩写.

下面是 Ajax 应用程序所用到的基本技术:
• HTML 用于建立 Web 表单并确定应用程序其他部分使用的字段。
• JavaScript 代码是运行 Ajax 应用程序的核心代码,帮助改进与服务器应用程序的通信。
• DHTML 或 Dynamic HTML,用于动态更新表单。我们将使用 div、span 和其他动态 HTML 元素来标记 HTML。
• 文档对象模型 DOM 用于(通过 JavaScript 代码)处理 HTML 结构和(某些情况下)服务器返回的 XML。

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 的就绪状态。

status:返回当前请求的 HTTP 状态码

responseText:服务器返回的请求响应文本。

onreadystatechange:当请求被发送到服务器时,我们需要执行一些基于响应的任务。 每当 readyState 改变时,就会触发 onreadystatechange 事件。

提供的参数参考:http://www.cnblogs.com/yxpblog/p/4231681.html

支持多种浏览器的方式创建 XMLHttpRequest 对象:

var xmlHttp = false; //全局变量,用于记录XMLHttpRequest对象
//创建XMLHttpRequest对象的方法
function createXMLHttpRequest() {
if(window.ActiveXObject) { //Inetrnet Explorer时,创建XMLHttpRequest对象的方法
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
//旧版本的Inetrnet Explorer,创建XMLHttpRequest对象
} catch(e) {
window.alert("创建XMLHttpRequest对象错误"+e);
}
}
} else if(window.XMLHttpRequest) { //mozilla时,创建XMLHttpRequest对象的方法
xmlHttp = new XMLHttpRequest();
}
if(!(xmlHttp)) { //未成功创建XMLHttpRequest对象
window.alert("创建XMLHttpRequest对象异常!");
}
}

Ajax中的请求/响应

发出请求:Ajax 应用程序中基本相同的流程:
1. 从 Web 表单中获取需要的数据。
2. 建立要连接的 URL。
3. 打开到服务器的连接。
4. 设置服务器在完成后要运行的函数。
5. 发送请求。

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);
}

必须知道两点:

1.什么也不要做,直到 xmlHttp.readyState 属性的值等于 4。

2.服务器将把响应填充到 xmlHttp.responseText 属性中。

响应函数:

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.cnblogs.com/gaoweipeng/archive/2009/01/21/1379184.html

最新文章

  1. js 获取时间间隔
  2. react 调用 native 的callShareAllFunc()方法,实现分享
  3. MongoDB安装及入门
  4. scrollify.js 鼠标滚动
  5. macbook装双系统多分区其实很简单,你只要把macbook当作一台普通pc就可以了!
  6. 深入浅出Spring(四) Spring实例分析
  7. eclipse中异常的快捷键
  8. innodb 悲观锁,乐观锁
  9. Android——C语言、JNI与低层调用
  10. 【UVA1579】俄罗斯套娃 Matryoshka (动态规划)
  11. 安卓模拟器创建和使用SD卡的方法
  12. 曾经让我很吐血的Bug(初学者)
  13. Python爬虫(十一)_案例:使用正则表达式的爬虫
  14. Excle巧取汉字打头的字串内容
  15. 学号 20175329 2018-2019-3《Java程序设计》第九周学习总结
  16. 02_ if_else if 练习
  17. 步步为营-90-SEO(url重写+超链接技巧)
  18. 微信公众号支付(JSAPI)对接备忘
  19. win32 汇编学习(2):消息框
  20. Day1-python基础

热门文章

  1. SpringBoot + Vue + nginx项目部署(零基础带你部署)
  2. 关于fastJson的几个问题
  3. js 继承的简单理解
  4. poj 2081 Recaman's Sequence (dp)
  5. 11jsp
  6. Android九宫格解锁有多少种姿势
  7. nicstat命令安装与分析
  8. 洛谷P3402 可持久化并查集
  9. CentOS下nagios报警飞信部署四步走
  10. 【Python网络爬虫三】 爬取网页新闻