• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >AJAX > AJAX机制详解以及跨域通信

AJAX机制详解以及跨域通信

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了AJAX机制详解以及跨域通信等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

1.Ajax

1.1.Ajax简介
  Ajax简介这一部分我们主要是谈一下ajax的起源,ajax是什么?因为这些是跟技术无关的。所以,大多细节都是一笔带过。

  Ajax的起源?

  Ajax一词源于2005年 Jesse James Garrett发表的一篇题为"Ajax:A new Approach to Web Applications".他在这篇文       章中介绍了一种新技术,用他的话说,就是Ajax :Asynchronous JavaScript +XML的缩写。

  Ajax是什么?

  这种新技术的主要目的就是为了使前端网页能够向服务器请求额外的数据而不需要卸载页面。自从这种技术出现以后,微软率先引入XHRt对象(ajax能够实现的核心对象),然后其他浏览器相继实现这种技术。总而言之,ajax就是一种能异步通信的技术。

1.2.Ajax的核心对象---XMLHttpRequest
  因为IE5是最先引入这个XHR对象的,当时并没有事实上的标准。在IE中有三种不同的XHR对象版本:MSXML2.XMLHttp,MSXML2.XMLHttp.3.0和MSXML2.XMLHttp.6.0;

根据这三种版本号,在IE中创建一个XHR对象如下:

function createXHR() { //IE7之前的版本通过这种方式
  var versions = [
    'MSXML2.XMLHttp',
    'MSXML2.XMLHttp.3.0',
    'MSXML2.XMLHttp.6.0'
  ];
  var xhr = null;
  for (var item in versions) {
    try {
      xhr = new ActiveXObject(item); //若不存在该版本,可能会出错
      if (xhr) break;
    } catch (e) {
      //一般对这种错误不做处理
    }
  }
  return xhr;
}
在IE引入这个对象之后,其他浏览器厂商也相继跟随,这时候XHR对象成为事实上的标准!

跨浏览器创建XHR对象;

function createXHttpRequest() {
  if (typeof XMLHttpRequest !== 'undefined') { //不要用 if(XMLHttpRequest){}这种形式,
    return new XMLHttpRequest();              //如果是这种形式在找不到XMLHttpRequest函数的情况下,会报错。
} else if (typeof ActiveXObject !== 'undefined') {
         return createXHR(); //用到刚才我们创建的函数
  } else { throw new Error('不能创建XMLHttpRequest对象'); } }

1.2.XMLHttpRequest的用法
XMLHttpRequest对象的函数有6个:

open("method",url,boolean);
              //该方法的三个参数,分别为----提交方式"get"或者"post"等 
                //&& url是相对于执行代码的当前页面的路径(使用绝对路径是允许的)&&是否异步 
send();    
           //这个方法接收一个参数,这个参数是作为请求主体发送的数据, 
           //说明: 如果有参数,请使用post方式提交 使用方式如下,send("user="+username+"&pwd="+password);
           //如果没有参数,为了兼容性考虑,必须在参数中传入null,即send(null);该方式使用get方式提交

abort();       //取消当前响应,关闭连接并且结束任何未决的网络活动。

          //这个方法把 XMLHttpRequest 对象重置为 readyState 为 0 的状态,并且取消所有未决             //的网络活动。例如,如果请求用了太长时间,而且响应不再必要的时候,可以调用这个方法。

getResponseHeader()   

          //返回指定的 HTTP 响应头部的值。其参数是要返回的 HTTP 响应头部的名称。可以使用任             //何大小写来制定这个头部名字,和响应头部的比较是不区分大小写的。

          //该方法的返回值是指定的 HTTP 响应头部的值,如果没有接收到这个头部或者 readyStat             //e 小于 3 则为空字符串。如果接收到多个有指定名称的头部,这个头部的值被连接起来并             //返回,使用逗号和空格分隔开各个头部的值。

getAllResponseHeaders()       

          //把 HTTP 响应头部作为未解析的字符串返回。

          //如果 readyState 小于 3,这个方法返回 null。否则,它返回服务器发送的所有 HTTP 响应的

          //头部。头部作为单个的字符串返回,一行一个头部。每行用换行符 "\r\n" 隔开。

setRequestHeader()

         //向一个打开但未发送的请求设置或添加一个 HTTP 请求。

</div>

  XMLHttpRequest对象的属性有5个:

属性 描述
responseText 作为响应主题被返回的文本
responseXML 如果相响应的是text/html或者application/xml类型的话,这个属性将保存着响应的XML文档
status http的响应状态码
statusText http状态的说明
readyState XMLHttpRequest对象的状态位 0 1 2 3 4 分别表示5种状态
timeout 设置超时时间,单位是ms.目前只有IE8+支持---尚未标准化(不推荐使用)

  XMLHttpRequest对象的事件属性onReadyStateChange:-----所有浏览器兼容

  该属性监听的是  XMLHttpRequest对象的readyState属性的变化:

  readyState的变化分别对应如下状态:

  0:尚未初始化。未调用open()之前

  1:启动。调用open()之后,但是未调用send();

  2:发送。调用send()但是尚未得到响应。

  3:正在接收数据。刚接收到响应数据开始到接收完成之前。

  4: 完成。数据接收完成。

xhr.onreadystatechange = function () {
 if (xhr.readyState == 4) {
  if (xhr.status >= 200 && xhr.status <== 300 || xhr.status == 304) {
   alert(xhr.responseText);
   //处理接收的数据
  } else {
   //请求失败,未得到响应数据
  }
 }
}; //补充说明:注册事件必须发生在send()以前

</div>

XMLHttpRequest对象的事件属性ontimeout -----仅限IE8+,不过最新的主流高版本浏览器也已经实现(不推荐使用)

xhr.timeout=1000;//一秒钟

xhr.ontimeout=functon(){
  //处理代码
  ......
}
  这种使用方式有个问题需要注意,就是在超时之后,在接收到数据后仍然会触发onreadystatechange事件,如果在处理onreadychange事件时访问xhr.status属性,会出错。所以我们在访问该属性时需要做一下try{}catch处理。但是,因为这个属性暂不兼容,所有我们就不重点讲了。

XMLHttpRequest对象的事件属性onload onerror onloadstar onbort onprogress:

                                                                                                   -----非IE浏览器和IE 10+已实现

       onload在IE8以上可以实现,大部分事件根据readySate变化均可以实现,以上事件只不过是方便使用而已。

  onload和onprogress 这两种事件分别对应着readyState=4和readyState=3的情况,使用方式分别如下:

   xhr.onload= function (event) {
      //event只包含一个属性 event.target=xhr;使用方式只是在readyState=4时差不多..
    }
   xhr.onprogress=function(event){
     //event除了包含event.target=xhr之外,还包含三种属性
     //lengthComputale(进度信息是否可用),position(已接受字节数)和totalSize(总字节数).
     
   }
</div>


补充:有些事件均可以根据readyState的状态进行模拟。只有有的浏览器进行了方便化处理而已。  

3.单向跨域技术 ---CORS
 今天我们这里讲的是客户端网页向不在同一个域的服务器请求数据..客户端在收到返回的数据时时,用回调函数处理数据。

即:

 1. 客户端向域外服务器请求数据

 2.服务器得到响应后向客户端发送数据。

 3.客户端根据返回的数据执行回调函数.

 我知道不同域下的iframe也可以进行通信,而且这也是一种跨域通信技术。但是,这种iframe页面之间的双向通信,我们在下一个专题里面讲解,今天主要讲的是单向通信。

3.1.CORS跨域请求的原理
在用xhr(XMLHttpRequest)对象或者xdr(XDomainRequest)

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-05-11关于JavaScript跨域问题及实时刷新解决方案
  • 2017-05-11Ajax发送和接收二进制字节流数据的方法
  • 2017-05-11基于iframe实现ajax跨域请求 获取网页中ajax数据
  • 2017-05-11Ajax初试之读取数据篇实现代码
  • 2017-12-27发送DELETE或PUT请求时springmvc获取参数为NULL
  • 2017-05-11双层ajax嵌套(可多层)用法实例
  • 2017-05-11Ajax的jsonp方式跨域获取数据的简单实例
  • 2017-05-11基于Ajax技术实现无刷新用户登录功能
  • 2017-05-11编写轻量ajax组件02--浅析AjaxPro
  • 2017-05-11Ajax标签导航效果(仿网易首页)

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 比较Ajax的三种实现及JSON解析
    • ajax+php中文乱码解决办法
    • 使用AJAX返回WebService里的集合具体实现
    • js统计网页在线时间的脚本
    • AJAX实现瀑布流布局
    • 用AJAX技术聚合RSS
    • ajax 怎么设置超时(一个action执行了2遍)
    • GET请求jsonp示例
    • 关于JavaScript跨域问题及实时刷新解决方案
    • AJAX中文乱码解决新方法分享

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有