ajax的核心技术解析

 ajax的核心技术解析
      读音:e:j^ks 。AJAX即“Asynchronous JavaScript and XML”(异步JavaScript和XML),AJAX并非缩写词,而是由Jesse James Gaiiett创造的名词,是指一种创建交互式网页应用的网页开发技术。Ajax:一种不用刷新整个页便可与服务器通讯的办法
   
Ajax的技术的产生
     Ajax被认为是(Asynchronous JavaScript and XML的缩写)。现在,允许浏览器与服务器通信而无须刷新当前页面的技术都被叫做Ajax.“Ajax”这个名字是在2005年2月,Adaptive Path的Jesse James Garrett在他的文章Ajax:A New Approach to Web Application中创造。而 Ajax 这项技术,是 Google 在Google Labs发布Google Maps和Google Suggest后真正为人所认识。

 

同步交互和异步交互
举个例子:普通B/S模式(同步)       AJAX技术(异步)
    同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事
    异步: 请求通过事件触发->服务器处理(这时浏览器仍然可以作其他事情)->处理完毕
    同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。 
    异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式
    
    易懂的理解:
    异步传输:   你传输吧,我去做我的事了,传输完了告诉我一声  
    同步传输:   你现在传输,我要亲眼看你传输完成,才去做别的事


不用刷新整个页面便可与服务器通讯的办法:
1、Flash
2、Java applet
3、框架:如果使用一组框架构造了一个网页,可以只更新其中一个框架,而不必惊动整个页面
隐藏的iframe
4、XMLHttpRequest:该对象是对 JavaScript 的一个扩展,可使网页与服务器进行通信。是创建 Ajax 应用的最佳选择。实际上通常把 Ajax 当成 XMLHttpRequest 对象的代名词

 

Ajax的工作原理

Ajax的核心是JavaScript对象XmlHttpRequest。
1、该对象在Internet Explorer 5中首次引入,它是一种支持异步请求的技术。简而言之,XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。
2、AJAX采用异步交互过程。AJAX在用户与服务器之间引入一个中间媒介,从而消除了网络交互过程中的处理—等待—处理—等待缺点。
3、用户的浏览器在执行任务时即装载了AJAX引擎。AJAX引擎用JavaScript语言编写,通常藏在一个隐藏的框架中。它负责编译用户界面及与服务器之间的交互。
4、AJAX引擎允许用户与应用软件之间的交互过程异步进行,独立于用户与网络服务器间的交流。现在,可以用Javascript调用AJAX引擎来代替产生一个HTTP的用户动作,内存中的数据编辑、页面导航、数据校验这些不需要重新载入整个页面的需求可以交给AJAX来执行。
5、使用AJAX,可以为JSP、开发人员、终端用户带来可见的便捷


Ajax工具包

Ajax并不是一项新技术,它实际上是几种技术,每种技术各尽其职,以一种全新的方式聚合在一起
服务器端语言:服务器需要具备向浏览器发送特定信息的能力。Ajax与服务器端语言无关。
1、XML (eXtensible Markup Language,可扩展标记语言) 是一种描述数据的格式。Aajx 程序需要某种格式化的格式来在服务器和客户端之间传递信息,XML 是其中的一种选择
2、XHTML(eXtended Hypertext Markup Language,使用扩展超媒体标记语言)和 CSS(Cascading Style Sheet,级联样式单)标准化呈现;
3、DOM(Document Object Model,文档对象模型)实现动态显示和交互;
4、使用XMLHTTP组件XMLHttpRequest对象进行异步数据读取
5、使用JavaScript绑定和处理所有数据


AJAX的缺陷

AJAX不是完美的技术。也存在缺陷:
1    AJAX大量使用了Javascript和AJAX引擎,而这个取决于浏览器的支持。IE5.0及以上、Mozilla1.0、NetScape7及以上版本才支持,Mozilla虽然也支持AJAX,但是提供XMLHttpRequest的方式不一样。所以,使用AJAX的程序必须测试针对各个浏览器的兼容性。
2   AJAX更新页面内容的时候并没有刷新整个页面,因此,网页的后退功能是失效的;有的用户还经常搞不清楚现在的数据是旧的还是已经更新过的。这个就需要在明显位置提醒用户“数据已更新”。
3    对流媒体的支持没有FLASH、Java Applet好。
4    一些手持设备(如手机、PDA等)现在还不能很好的支持Ajax。


说了这么多,下面我们就做一个ajax的案例:

第一个案例是ajax的get方法:

getAjax.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<base href="<%=basePath%>">

		<title>My JSP 'getAjax.jsp' starting page</title>

		<meta http-equiv="pragma" content="no-cache">
		<meta http-equiv="cache-control" content="no-cache">
		<meta http-equiv="expires" content="0">
		<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
		<meta http-equiv="description" content="This is my page">
		<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

	</head>

	<body>
		
		<input type="button" value="AjaxGet请求" οnclick="getAjax()"/>
		<div id="content"></div>

	</body>
</html>
<script>
function $(id) {
	return document.getElementById(id);
}
//getAjax请求
//创建XMLHttpRequest对象
function getXhr() {
	var xhr;
	try {
		//IE浏览器
		xhr = new ActiveXObject("Microsoft.XMLHTTP");
	} catch (err) {
		try {
			//firefox opera 等其他浏览器
			xhr = new XMLHttpRequest();
		} catch (er) {
			alert("您的浏览器不支持ajax技术的操作,请您升级.....");
		}

	}

	return xhr;
}

function getAjax(){
     
     //获取xhr对象
     var xhr = getXhr();
     //规定请求类型
  
     /*
     open(method,url,async)
         method:get ,post /get与post的区别总结出来
                /get 地址栏中显示? & 2k
                /post:url
        url:相对路径 也可以使绝对路径
      
        async:true异步 false 同步
     */
     
        xhr.open("get","main.jsp?username=123",true);
        
        //get请求 就不必要设置 xhr.setRequestHeader(header,value)
        
        //发送请求,如果是get请求send(参数)参数:必须是null或者xhr.send();
        //备注:如果xhr.send(参数);参数不为空情况下,会自动转换成post请求方式
        //您可以通过request.getMethod();方法获取请求的方式
        xhr.send();
        /*当发送请求时:readyState对象状态会自动改变并且有服务器端发送给客户端
        * readyState的每次改变都会自动处理onreadystatechanage事件
       
          readystate的值:
           0:未处理
           1:读取中
           2:已读取
           3:交互中
           4:完成
         值的每一次改变都会处理:onreadystatechanage事件 事件可以采用以下两种方式处理
             1、xhr.onreadystatechange=function(){}
             2、xhr.onreadystatechange= 函数的名字;
        */
        xhr.onreadystatechange = function (){
        
          //判读是否处理完毕
          if(xhr.readyState==4){
               //判读服务器是否处理成功!
              if(xhr.status==200){
                  $("content").innerHTML = xhr.responseText;
              }
          
          }
            
        
        } 
        
}

</script>

 

 

main.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
   out.println("<font color='red'>服务器处理完毕</font>");
  
   //获取请求的方法 
    String method =  request.getMethod();
   out.println("<br/>您是通过<font color='red'>"+method+"</font>方法向服务器发送请求的!");
   //获取传递的参数
   out.println(request.getParameter("username"));
%>

 

 

第二个案例是ajax的post方法:

 

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<base href="<%=basePath%>">

		<title>My JSP 'getAjax.jsp' starting page</title>

		<meta http-equiv="pragma" content="no-cache">
		<meta http-equiv="cache-control" content="no-cache">
		<meta http-equiv="expires" content="0">
		<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
		<meta http-equiv="description" content="This is my page">
		<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

	</head>

	<body>
		<form action="" enctype="application/x-www-form-urlencoded"></form>
		<input type="button" value="AjaxPost请求" οnclick="postAjax()"/>
		<div id="content"></div>

	</body>
</html>
<script>
function $(id) {
	return document.getElementById(id);
}
//getAjax请求
//创建XMLHttpRequest对象
function getXhr() {
	var xhr;
	try {
		//IE浏览器
		xhr = new ActiveXObject("Microsoft.XMLHTTP");
	} catch (err) {
		try {
			//firefox opera 等其他浏览器
			xhr = new XMLHttpRequest();
		} catch (er) {
			alert("您的浏览器不支持ajax技术的操作,请您升级.....");
		}

	}

	return xhr;
}

function postAjax(){
     
     //获取xhr对象
     var xhr = getXhr();
     //规定请求类型
  
     /*
     open(method,url,async)
         method:get ,post /get与post的区别总结出来
                /get 地址栏中显示? & 2k
                /post:url
        url:相对路径 也可以使绝对路径
      
        async:true异步 false 同步
     */
     
        xhr.open("post","main.jsp",true);
        
        //post请求在传递值的情况下必须设置 xhr.setRequestHeader(header,value)
        
        xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
        //发送请求,如果是post请求send(参数)参数:参数可以是null或者xhr.send()|send(带有参数的)
        xhr.send("username=345&pass=123");
        /*当发送请求时:readyState对象状态会自动改变并且有服务器端发送给客户端
        * readyState的每次改变都会自动处理onreadystatechanage事件
       
          readystate的值:
           0:未处理
           1:读取中
           2:已读取
           3:交互中
           4:完成
         值的每一次改变都会处理:onreadystatechanage事件 事件可以采用以下两种方式处理
             1、xhr.onreadystatechange=function(){}
             2、xhr.onreadystatechange= 函数的名字;
        */
        xhr.onreadystatechange = function (){
        
          //判读是否处理完毕
          if(xhr.readyState==4){
               //判读服务器是否处理成功!
              if(xhr.status==200){
                  //$("content").innerHTML = xhr.responseText;
                  alert(xhr.responseText);
              }
          
          }
            
        
        } 
        
}

  

</script>

 

 

 

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript核心技术 简介: 《JavaScript核心技术》对于各种浏览器浏览器版本、JavaScript版本、DOM版本的介绍,有助于我们理解所遇到的各种新旧代码,使我们能够对这些代码做出正确的取舍。《JavaScript核心技术》还提供了一些使用JavaScript的最佳实践。无论是新手还是老手,这些如何正确使用JavaScript的经验都能帮助他们养成良好的编程习惯。《JavaScript核心技术》还介绍了一些调试和开发JavaScript的工具,这些工具无疑能够提高我们的开发效率。 《JavaScript核心技术》最后对于Ajax和几个流行的JavaScript库的介绍,无疑会开阔我们在JavaScript使用上的思路。 《JavaScript核心技术》是一本真正意义上的“新书”,不仅介绍了最新的JavaScript知识和方向,还完全覆盖了当今Web开发中关于JavaScript的所有重要话题,它使用了大量实例代码,图文并茂地讲解了使用JavaScript的各个层次和领域的内容。它不是一本参考手册,但却是一本值得拥有的教程。 JavaScript核心技术 目录: 前言 第1章JavaScript初探 1.1规范和实现相互交织的历史 1.2跨浏览器的不兼容性和其他常见的JavaScript传说 1.3你能用JavaScript来做什么 1.4JavaScript初探:“HelloWorld!” 1.5JavaScript沙箱 1.6可访问性和JavaScript的最佳实践 第2章JavaScript数据类型与变量 2.1变量的标识 2.2作用域 2.3简单类型 2.4常量:有名称但不改变 2.5习题 第3章运算符和语句 3.1JavaScript语句的格式 3.2简单语句 3.3条件语句和程序流 3.4条件运算符 3.5逻辑运算符 3.6高级语句:循环语句 3.7习题 第4章JavaScript对象 4.1对象构造函数 4.2Number对象 4.3String对象 4.4正则表达式与RegExp 4.5有专门用途的对象:Date和Math 4.6JavaScript数组 4.7关联数组:不是数组的数组 4.8习题 第5章函数 5.1定义函数:细数所有方式 5.2回调函数 5.3函数和递归 5.4嵌套函数、函数闭包和内存泄漏 5.5作为对象的函数 5.6习题 第6章捕捉事件 6.1O级DOM上的事件句柄 6.22级DOM上的事件句柄 6.3产生事件 6.4习题 第7章表单与即时验证 7.1访问表单 7.2把事件附加在表单上:不同的方法 7.3选择列表 7.4单选按钮和复选框 7.5输入字段和JiT正则表达式 7.6习题 第8章沙箱及之上的cookie、连通性和隐私 第9章基础浏览器对象 第10章DOM:文档对象模型 第11章创建定制的JavaScript对象 第12章构建动态网页:在脚本中加入样式 第13章使用Ajax 第14章好消息:生动的程序库!令人惊异的Web服务!有趣的API! 附录习题答案
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值