当前位置: 首页 > news >正文

一个最简单的AJAX实例及解析

 去年开始看AJAX时候所写的第一个小程序,整理了下。应该算AJAX最简单的应用了。

首先,演示一下实际运行的ajax/ajax.html' target='_blank' class='l2'>效果。点击弹出新页面中的“See Author”链接,你将会看到该页面作者。从页面提交到显示从服务器获得的结果,这段过程你将不会发现页面的重刷新。
下面给出该示例的代码:
1. ajax.html

1. <html>
2. <head>
3. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
4. <title>A simple AJAX example</title>
5. <script type="text/javascript"><!--
6. function findAuthor(file){
7. var xmlObj = null;
8. if(window.XMLHttpRequest){
9. xmlObj = new XMLHttpRequest();
10. } else if(window.ActiveXObject){
11. xmlObj = new ActiveXObject("Microsoft.XMLHTTP");
12. } else {
13. return;
14. }
15. xmlObj.onreadystatechange = function(){
16. if(xmlObj.readyState == 4){
17. updateObj('author',
18. xmlObj.responseXML.getElementsByTagName('name')[0].firstChild.data);
19. }
20. }
21. xmlObj.open ('GET', file, true);
22. xmlObj.send ('');
23. }
24. function updateObj(obj, data){
25. var textNode = document.createTextNode(data);
26. document.getElementById(obj).appendChild(textNode);
27. }
28. //--></script>
29. </head>
30. <body>
31. <h1>A simple AJAX program</h1>
32. <p id="obj">This page is powered by <a id='link' href="data.xml"
33. title="View the author."
34. οnclick="findAuthor('data.xml'); this.style.display='none'; return false">See
35. Author.</a><span id="author" style="color: olive; font-weight: bolder"></span></p>
36. </body>
37. </html>




2.data.xml

1. <?xml version="1.0" encoding="UTF-8"?>
2. <author>
3. <name>www.jsfchina.org</name>
4. </author>




解析下。

该例应该算是最简单的ajax应用了。为了尽求简单性,这里没有使用到任何服务器端技术,诸如servlet,cgi等等。这里并没有使用到任何业务方法,而是直接从服务器的一个xml文档(data.xml)中读取数据。为了简洁性,本例将JavaScript文件也集成到了ajax.html中,实际应用中完全可以独立出去使用。

该例通过点击链接,激发了一个javascript的方法然后进行交互处理。

AJAX的核心是XMLHttpRequest,本例通过下列代码创建这个对象

1. var xmlObj = null;
2. if(window.XMLHttpRequest){
3. xmlObj = new XMLHttpRequest();
4. } else if(window.ActiveXObject){
5. xmlObj = new ActiveXObject("Microsoft.XMLHTTP");
6. } else {
7. return;
8. }


if(window.XMLHttpRequest)处理了浏览器是mozilla的情况,而if (window.ActiveXObject)则处理了浏览器为IE的情况,目的都是一个:创建了一个XMLHttpRequest对象。创建这个对象的目的就是让XMLHttpRequest对象与服务器交互,而不影响用户正在浏览的页面。这也是AJAX称谓的由来,异步javascript交互xml 处理。

创建好XMLHttpRequest对象之后,调用的函数将会监听该对象状态的变化,即onreadystatechange属性。XMLHttpRequest对象有5个状态,从0-4的整数,也就是说onreadystatechange调用的函数(示例中function (){...})将会执行4次。示例中我们在该对象处于完成状态(readyState=4)时进行处理(此时服务器已经传回所有信息),为id为 “author”的span对象添加了一个textNode节点,该textNode是data.xml文档中name节点的第一个子元素的值。

好了,这就是完成一次异步交互所需要的步骤。

以下是一些注意点。

第一,本例中使用的http的GET方法,你也可以使用POST,但是要设定Content-Type值,即 xmlObj.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),这个方法用来设置了MIME类型。还有一点要注意,这些方法最好都大写,否则在firefox下将没有作用。

第二,xmlObj.open ('GET', file, true)。该方法会建立与服务器的链接,‘GET’指明了http调用方法;file指明了调用的url;true指明了该调用是异步处理,可以省略,默认为'true'。

第三,xmlObj.send(para)向服务器发出请求。是以POST向服务器发出request,其参数格式为:name=namevalue&so=on

相关文章:

  • 静态库中有图片,改如何存放呢??
  • 用Java结合SAX 2.0 解析XML文档
  • HDU 2594 Simpsons’ Hidden Talents(辛普森一家的潜在天赋)
  • 在Dom4j中使用xpath
  • C# 文件与目录的基本操作(System.IO)
  • 在JavaScript中使用Java
  • Postgresql 同步流复制
  • ??在JSP中,java和JavaScript如何交互?
  • 在Struts应用中使用Ajax
  • jQuery计算文本宽度和input标签根据输入字符动态自适应宽度的实现
  • Eclipse 3.2.2 安装、汉化和插件配置
  • iOS开发 贝塞尔曲线UIBezierPath(2)
  • Eclipse 平台入门
  • 【安卓面试题】Activity和Task的启动模式有哪些?每种含义是什么?举例说明各自的应用场景...
  • ??eclipse的安装配置问题!??
  • 【Amaple教程】5. 插件
  • 【Linux系统编程】快速查找errno错误码信息
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • ESLint简单操作
  • JavaScript新鲜事·第5期
  • Java方法详解
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • Node项目之评分系统(二)- 数据库设计
  • PAT A1092
  • v-if和v-for连用出现的问题
  • Vue官网教程学习过程中值得记录的一些事情
  • 彻底搞懂浏览器Event-loop
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 使用parted解决大于2T的磁盘分区
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 做一名精致的JavaScripter 01:JavaScript简介
  • 我们雇佣了一只大猴子...
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • ###C语言程序设计-----C语言学习(3)#
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (汇总)os模块以及shutil模块对文件的操作
  • (六)c52学习之旅-独立按键
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)shell调试方法
  • .mysql secret在哪_MySQL如何使用索引
  • .NET Remoting学习笔记(三)信道
  • .NET 使用 XPath 来读写 XML 文件
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .NET大文件上传知识整理
  • .NET和.COM和.CN域名区别
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成
  • [《百万宝贝》观后]To be or not to be?
  • [20160902]rm -rf的惨案.txt
  • [AIGC] 开源流程引擎哪个好,如何选型?