JavaScript之Ajax同步

一.XMLHttpRequest
Ajax技术核心是XMLHttpRequest对象(简称XHR),这是由微软首先引入的一个特性,其他浏览器提供商后来都提供了相同的实现。在XHR出现之前,Ajax式的通信必须借助一些hack手段来实现,大多数是使用隐藏的框架或内嵌框架。
XHR的出现,提供了向服务器发送请求和解析服务器响应提供了流畅的接口。能够以异步方式从服务器获取更多的信息,这就意味着,用户只要触发某一事件,在不刷新网页的情况下,更新服务器最新的数据。
虽然Ajax中的x代表的是XML,但Ajax通信和数据格式无关,也就是说这种技术不一定使用XML。
 
IE7+、Firefox、Opera、Chrome和Safari都支持原生的XHR对象,在这些浏览器中创建XHR对象可以直接实例化XMLHttpRequest即可。
var xhr = new XMLHttpRequest();
alert(xhr); //XMLHttpRequest
 
如果是IE6及以下,那么我们必须还需要使用ActiveX对象通过MSXML库来实现。在低版本IE浏览器可能会遇到三种不同版本的XHR对象,即MSXML2.XMLHttp、MSXML2.XMLHttp.3.0、MSXML2.XMLHttp.6.0。我们可以编写一个函数。

  1. function createXHR() { 
  2. if (typeof XMLHttpRequest != 'undefined') { 
  3. return new XMLHttpRequest(); 
  4. } else if  (typeof ActiveXObject != 'undefined') { 
  5. var versions = [ 
  6. 'MSXML2.XMLHttp.6.0', 
  7. 'MSXML2.XMLHttp.3.0', 
  8. 'MSXML2.XMLHttp' 
  9. ]; 
  10. for (var i = 0; i < versions.length; i ++) { 
  11. try { 
  12. return new ActiveXObject(version[i]); 
  13. } catch (e) { 
  14. //跳过 
  15. }  
  16. } else { 
  17. throw new Error('您的浏览器不支持XHR对象!'); 
  18.   
  19. var xhr = new createXHR(); 

 
在使用XHR对象时,先必须调用open()方法,它接受三个参数:要发送的请求类型(get、post)、请求的URL和表示是否异步。
xhr.open('get', 'demo.php', false); //对于demo.php的get请求,false同步
 
PS:demo.php的代码如下:
//一个时间
 
open()方法并不会真正发送请求,而只是启动一个请求以备发送。通过send()方法进行发送请求,send()方法接受一个参数,作为请求主体发送的数据。如果不需要则,必须填null。执行send()方法之后,请求就会发送到服务器上。
xhr.send(null); //发送请求
 
当请求发送到服务器端,收到响应后,响应的数据会自动填充XHR对象的属性。那么一共有四个属性:
 

属性名 说明
responseText 作为响应主体被返回的文本
responseXML 如果响应主体内容类型是"text/xml"或"application/xml",则返回包含响应数据的XML DOM文档
status 响应的HTTP状态
statusText HTTP状态的说明

 
接受响应之后,第一步检查status属性,以确定响应已经成功返回。一般而已HTTP状态代码为200作为成功的标志。除了成功的状态代码,还有一些别的:
 
 

HTTP状态码 状态字符串 说明
200 OK 服务器成功返回了页面
400 Bad Request 语法错误导致服务器不识别
401 Unauthorized 请求需要用户认证
404 Not found 指定的URL在服务器上找不到
500 Internal Server Error 服务器遇到意外错误,无法完成请求
503 ServiceUnavailable 由于服务器过载或维护导致无法完成请求

 
我们判断HTTP状态值即可,不建议使用HTTP状态说明,因为在跨浏览器的时候,可能会不太一致。

  1. addEvent(document, 'click', function () { 
  2. var xhr = new createXHR(); 
  3. xhr.open('get', 'demo.php?rand=' + Math.random(), false); //设置了同步 
  4. xhr.send(null); 
  5. if (xhr.status == 200) { //如果返回成功了 
  6. alert(xhr.responseText); //调出服务器返回的数据 
  7. } else { 
  8. alert('数据返回失败!状态代码:' + xhr.status + '状态信息:' + xhr.statusText); 
  9. }); 

 

//PS:如果没有向服务器端发送,firebug无发送提示,如果有send()方法,则firebug会提示已发送
//PS:通过点击事件,不断的向服务器发送请求,然后服务器会时时的返回最新的数据,就是Ajax功能
//PS:IE浏览器第一次会向服务器端请求,获取最新数据,而第二次它就默认获取的缓存数据,导致数据不是最新的
//PS:怎么处理缓存?可以使用JS随机字符串

以上的代码每次点击页面的时候,返回的时间都是时时的,不同的,说明都是通过服务器及时加载回的数据。那么我们也可以测试一下在非Ajax情况下的情况,创建一个demo2.php文件,使用非Ajax。

  1. <script type="text/javascript" src="base.js"></script> 
  2. <script type="text/javascript"> 
  3.     addEvent(document, 'click', function () { 
  4.         alert("<?php echo Date('Y-m-d H:i:s')?>"); 
  5.     }); 
  6. </script> 

 

时间: 2024-08-18 01:33:02

JavaScript之Ajax同步的相关文章

jquery ajax同步和异步属性async详解

例1.jquery+ajax/" target="_blank">jquery ajax同步方式  代码如下 复制代码 $.ajax({ url : 'test.php', type : 'post', async: false,//使用同步的方式,true为异步方式 data : {'act':'addvideo', 'videoname':videoname},//这里使用json对象 success : function(data){ //code here...

关于Javascript中ajax应用详解

1:定义AJAX全称为"Asynchronous JavaScript and XML"(异步JavaScript和XML),是一种创建交互式网页应用的网页开发技术. Ajax 不是一种单一的技术.实际上是几种技术,每种技术都各有其特色,这些技术以全新强大方式融合在一起.Ajax 包含: 使用 XHTML 和 CSS 基于标准的呈现 使用文档对象模型的动态显示和交互 使用 XML 和 XSLT 的数据交换和操作 使用 XMLHttpRequest 的异步数据检索 将它们绑定到一起的 J

初步了解JavaScript,Ajax,jQuery,并比较三者关系_AJAX相关

jquery是对javascript很好的封装,而且很轻量级,可以近似的将其称其为框架,下面就来对比javascript与jquery对ajax的实现,以突出jquery对其封装后,在实现方便的简易性,而且不仅如此,用jquery代替javascript来实现一些功能对于浏览器的兼容性也会带来意想不到的好处. 一.基本认识 1.JavaScript 定义:          javaScript的简写形式就是JS,是由Netscape公司开发的一种脚本语言,一种广泛用于客户端Web开发的脚本语言

javascript原生ajax写法分享_javascript技巧

ajax:一种请求数据的方式,不需要刷新整个页面: ajax的技术核心是 XMLHttpRequest 对象: ajax 请求过程:创建 XMLHttpRequest 对象.连接服务器.发送请求.接收响应数据: /** * 得到ajax对象 */ function getajaxHttp() { var xmlHttp; try { //chrome, Firefox, Opera 8.0+, Safari xmlHttp = new XMLHttpRequest(); } catch (e)

基于javascript、ajax、memcache和PHP实现的简易在线聊天室_javascript技巧

在线聊天室(online chatrooms)是一个共多人进行沟通交流的网络平台,随着越来越多的新技术的发明和成熟运用,在线聊天室也出现使用各种不同技术的, 这篇文章我想简单总结一下. 首先说一下前台技术,最新的当然是基于HTML5的websocket,它实现了浏览器与服务器全双工通信(full-duplex).WebSocket通信协议于2011年被IETF定为标准 RFC 6455,WebSocketAPI被W3C定为标准.在WebSocket API中,浏览器和服务器只需要做一个握手的动作

初步了解JavaScript,Ajax,jQuery,并比较三者关系

jquery是对javascript很好的封装,而且很轻量级,可以近似的将其称其为框架,下面就来对比javascript与jquery对ajax的实现,以突出jquery对其封装后,在实现方便的简易性,而且不仅如此,用jquery代替javascript来实现一些功能对于浏览器的兼容性也会带来意想不到的好处. 一.基本认识 1.JavaScript 定义: javaScript的简写形式就是JS,是由Netscape公司开发的一种脚本语言,一种广泛用于客户端Web开发的脚本语言,常用来给HTML

ajax同步异步的简单实现

本文为大家介绍下ajax同步异步的简单实现,感兴趣的朋友可以参考下 复制代码 代码如下: $("#btn_saveFWSB").click(function(){  var obj=checkData(arr);  if(obj.flag==true){  hideAddDiv();  $.ajax({  type : "POST",  url : "/vts/doInsertFWZT.do",  async: false ,//ajax同步 

jquery中的ajax同步和异步详解_AJAX相关

之前一直在写JQUERY代码的时候遇到AJAX加载数据都需要考虑代码运行顺序问题.最近的项目用了到AJAX同步.这个同步的意思是当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面出去假死状态,当这个AJAX执行完毕后才会继续运行其他代码页面假死状态解除. 而异步则这个AJAX代码运行中的时候其他代码一样可以运行. jquery的async:false,这个属性 默认是true:异步,false:同步. $.ajax({ type: "post", url: "

JavaScript基于Ajax实现不刷新在网页上动态显示文件内容_AJAX相关

本文实例讲述了JavaScript基于Ajax实现不刷新在网页上动态显示文件内容的方法.分享给大家供大家参考.具体如下: 下面的JS代码是一个最基础的JS的ajax实现,可以动态显示服务器上的文件ajax_info.txt文件的内容 <!DOCTYPE html> <html> <head> <title>sharejs.com</title> <script> function loadXMLDoc() { var xmlhttp;