Ajax核心知识总结

Ajax的原理

通过XMLHttpRequest对象来向服务器发送异步请求,从服务器获得数据,用JavaScript来操作DOM从而更新页面。

特点

  • 提交:不用向服务器提交整个页面
  • 返回:不再是整个页面,而是XML,JSON等数据形式
  • 效果:局部更新网页。

XMLHttpRequest对象是Ajax技术的核心。

功能

一套可以在Javascript等脚本语言中通过http协议传送或接收XML及其他数据的一套API。

用法步骤:

在做项目的过程中,搜索框的联想功能中用到了Ajax技术,因为当时这个联想功能是属于公共部分,一个人做好,其他系统直接用,而且自己当时没学习Ajax,所以就直接按着文档去实现。现在趁着总结,结合这个联想功能的js文件,来总结XMLHttpRequest的五步使用法。

/*1.针对不同浏览器创建XMLHttpRequest对象*/

 if(window.XMLHttpRequest){
     //alert("IE7,IE8,FireFox");
    xmlhttp =new XMLHttpRequest();
    //针对某些特定版本的mozillar浏览器的BUG进行修正
    //具体来说:浏览器是通过MIME Type来决定什么内容用什么形式显示
    //如果来自服务器的响应没有 XML mime-type 头部,则一些版本的 Mozilla 浏览器不能正常运行。
    //对于这种情况,httpRequest.overrideMimeType('text/xml'); 语句将覆盖发送给服务器的头部,强制 text/xml 作为 mime-type。
    if(xmlhttp.overrideMimeType){
        xmlhttp.overrideMimeType("text/xml");
    }
}else if(window.ActiveXObject){
    //alert("IE6,IE5.5,IE5");
    var activexName=["MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.5.0",
    "MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0",
    "MSXML2.XMLHTTP","Miscrosoft XMLHTTP"];
    for(var i=0;i<activexName.length;i++) {
         try{
             xmlhttp=new ActiveXObject(activexName[i]);
             break;
        }catch(e){  

        }
    }
}
if(xmlhttp == undefined || xmlhttp == null){
    alert("当前浏览器不支持创建XMLHttpRequest对象,请更换浏览器");
     return;
}
/*2.在XMLHttpRequest对象上注册回调函数*/
xmlhttp.onreadystatechange=callback;
//XMLHttpRequest对象有readyState属性和onreadystatechange属性(函数),当readyState属性改变时,就会调用onreadystatechange
// 0: 请求未初始化
// 1: 服务器连接已建立
// 2: 请求已接收
// 3: 请求处理中
// 4: 请求已完成,且响应已就绪
//当onreadystatechange触发时,就会调用callback函数
/*3.使用open方法设置和服务器端交互的基本信息*/
//GET方式交互
xmlhttp.open("GET","AJAX?name=" + userName,true);  

//POST方式交互
xmlhttp.open("POST","AJAX",true);
//POST方式交互所需增加的代码
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
/*4.设置发送的数据,开始和服务器端交互 */
    //GET方式
    xmlhttp.send(null);  

    //POST方式
    xmlhttp.send("name=" + userName);
/*5.更新界面*/

//在回调函数中判断交互是否结束,响应是否正确,并根据需要获取服务器返回的数据,并更新页面

function callback(){
//判断和服务器端的交互是否完成,还要判断服务器端是否正确返回了数据
	if(xmlhttp.readyState == 4){
	//表示和服务器端的交互已经完成
			if(xmlhttp.status == 200){
			//表示服务器的是响应代码是200,正确返回了数据
			var message=xmlhttp.responseText;
			//XML数据对应的DOM对象的接受方法
			//使用的前提是,服务器端需要设置contenttype为text/xml  

			//记忆像div标签中填充文本内容的方法
			var div=document.getElementById("message");
			div.innerHTML=message;  

   }
}

五步法封装:

在实际使用XMLHTTPRequest当中,不能每次都创建对象,我们需要将公共部分抽象成“类”,在用的时候,我们直接调用对象的属性,方法,并传入相应的参数即可。

//创建一个"类",这个"类"具有XMLHTTP属性
function CallBackObject()
{
    this.XmlHttp = this.GetHttpObject();
}
// 通过原型设置这个类的其他属性:
//通过GetHTTPObject获得XMLHTTPRequest对象,此属性中封装的是第一步
CallBackObject.prototype.GetHttpObject = function()
{
  var xmlhttp;
  // if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
    // try {
      // xmlhttp = new XMLHttpRequest();
    // } catch (e) {
      // xmlhttp = false;
    // }
  // }
   try{
		//对于Firefox和Opera等浏览器
        xmlhttp=new XMLHttpRequest();
        //有此版本的Mozilla浏览器在处理服务器返回的包含XML mime-type头部信息内容时会出错。
        //所以,为了确保返回内容是text/xml信息,需要包含下面的语句。
        if(xmlhttp.overrideMimeType)
        {
               xmlhttp.overrideMimeType("text/xml");
        }
       }catch(e){  //对于IE浏览器
                var activexName=new Array('Msxml2.XMLHTTP.7.0',
                              'Msxml2.XMLHTTP.6.0',
                              'Msxml2.XMLHTTP.5.0',
                                          'Msxml2.XMLHTTP.4.0',
                                          'Msxml2.XMLHTTP.3.0',
                                          'Msxml2.XMLHTTP',
                                          'Micrsoft.XMLHTTP');
                var success=false;
                for(var i=0;i<activexName.length && !success;i++){
                    try{
                        xmlhttp=new ActiveXObject(activexName[i]);
                        success=true;
                        break;
                    }catch(e){    

                    }    

                }
                if(!success){
                    alert('Unable to create XMLHttpRequest.');
                }
            }
		return xmlhttp;
        }   

}
 //DoCallBack封装第二步,第三和第四步
CallBackObject.prototype.DoCallBack = function(URL)
{
  if( this.XmlHttp )
  {
    if( this.XmlHttp.readyState == 4 || this.XmlHttp.readyState == 0 )
    {
      var oThis = this;
      this.XmlHttp.open('POST', URL);
      this.XmlHttp.onreadystatechange = function(){ oThis.ReadyStateChange(); };
      this.XmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      this.XmlHttp.send(null);
    }
  }
}

CallBackObject.prototype.AbortCallBack = function()
{
  if( this.XmlHttp )
    this.XmlHttp.abort();
}

CallBackObject.prototype.OnLoading = function()
{
  // Loading
}

CallBackObject.prototype.OnLoaded = function()
{
  // Loaded
}

CallBackObject.prototype.OnInteractive = function()
{
  // Interactive
}

CallBackObject.prototype.OnComplete = function(responseText, responseXml)
{
  // Complete
}

CallBackObject.prototype.OnAbort = function()
{
  // Abort
}

CallBackObject.prototype.OnError = function(status, statusText)
{
  // Error
}
 //封装第五步,在回调函数中判断交互是否结束,响应是否正确,并根据需要获取服务器返回的数据,并更新页面
CallBackObject.prototype.ReadyStateChange = function()
{
  if( this.XmlHttp.readyState == 1 )
  {
    this.OnLoading();
 }
  else if( this.XmlHttp.readyState == 2 )
  {
   this.OnLoaded();
  }
  else if( this.XmlHttp.readyState == 3 )
  {
   this.OnInteractive();
  }
  else if( this.XmlHttp.readyState == 4 )
  {
   if( this.XmlHttp.status == 0 )
      this.OnAbort();
    else if( this.XmlHttp.status == 200 && this.XmlHttp.statusText == "OK" )
      this.OnComplete(this.XmlHttp.responseText, this.XmlHttp.responseXML);
    else
      this.OnError(this.XmlHttp.status, this.XmlHttp.statusText, this.XmlHttp.responseText);
  }
}
时间: 2024-07-29 13:52:42

Ajax核心知识总结的相关文章

Ajax核心知识——XMLHttpRequest

第一节:XMLHttpRequest 对象创建 所有现代浏览器均支持 XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject) . XMLHttpRequest 用于在后台与服务器交换数据.这意味着可以在不重新加载整个网页的情况下,对网页的某 部分进行更新 第二节:XMLHttpRequest 对象请求后台 1.open(method,url,async) 规定请求的类型.URL 以及是否异步处理请求. method:请求的类型:GET 或 POST url:文

Ajax核心知识

1:XMLHttpRequest  对象创建 所有现代浏览器均支持 XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject) .XMLHttpRequest 用于在后台与服务器交换数据.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. var xmlHttp; if(window.XMLHttpRequest){ xmlHttp=new XMLHttpRequest(); }else{ xmlHttp=new ActiveXObject("Mi

对学习Ajax的知识总结

1.对Ajax的初步认识 1.1. Ajax 是一种网页开发技术,(Asynchronous Javascript + XML)异步 JavaScript 和 XML: 1.2.Ajax 是异步交互,局部刷新: 1.3.Ajax 能减少服务器压力: 1.4.Ajax 能提高用户体验: 2.Ajax交互和传统交互的比较 传统交互:网页整体刷新,服务器压力大,用户体验不好: Ajax 交互:局部刷新,服务器压力小,用户体验好: 3.Ajax核心知识 3.1 XMLHttpRequest对象的创建 所

网络基础知识、ASP.NET 核心知识(1)*

为什么要写网络? 我原本的计划是这样的,连续两天梳理ASP.NET开发的核心知识.说到这呢,有人问了.“不是说好了做ASP.NET笔记吗?为啥要写网络基础知识?是不是傻?” 原因是这样的.作为网站开发人员,你所开发的软件产品最终是要在网络上运行的.这就像一个生产商,要生产供给东北地区的产品,而生产商对东北的天气.地理.人文毫无了解.生产商的产品肯定是不可用的,或者低端的!产品质量不好,那是自然的.产品质量好,那算你点儿高.那么作为ASP.NET开发人员,如果一点不懂http协议.不晓得Ajax.

Ajax基础知识 浅析(含php基础语法知识)

1.php基础语法    后缀名为.php的文件 (1) echo   向页面中输入字符串  <?php    所有php相关代码都要写在<?php ?>这个标签之中 echo "<div>Hello World!</div>"; ?> (2) $  变量声明  如果只声明不赋值,会报错 <?php $num=123; echo $num; echo "<div>编号为:".$num."&l

spring核心知识(学习心得)

直接进入主题,主要分为两大部分:框架学习心得和spring框架的核心知识. 学习心得 1.学习框架的时候,一定要弄清楚的几个问题: a. 这是一个什么框架 轻量级还是重量级, 侵入式还是非侵入式,是解决单个问题还是整体的解决方案. b. 框架的设计理念是什么(为了解决什么问题而出现) c. 框架的优缺点 d. 框架的架构是怎样的 e. 框架的核心是什么 f. 框架能实现哪些功能 在学习一个框架的时候如果都不知道它能够提供哪些功能,就更加不用谈功能实现和充分利用框架了 2. 在学习多个框架以后,如

Ajax基础知识

Ajax名称 Asynchronous Javascript And XML 翻译为: 异步JS数据交互模块: 作用 实现前后端或跨页面间的异步数据通信: 同源策略限制 Ajax默认只能在同一个网站中使用,不能跨域, 最好在网站环境(服务器环境)下测试. Ajax核心对象属性方法(重点) XMLHttpRequest 是Ajax的核心对象,是浏览器内建的对象,特点如下: 1)在不重新加载页面的情况下更新网页 2)在页面已加载后从服务器请求数据 3)在页面已加载后从服务器接收数据 4)在后台向服务

AJAX 核心 —— XMLHTTPRequest 对象 回顾记录

AJAX 概述 不使用 AJAX 的网页,如果要更新内容,需要重载整个页面. AJAX ( Asynchronous Javascript And XML ,异步 Javascript 和 XML)用于异步通讯,通过在后台与服务器进行少量的数据交换,在不重载整个网页的情况下,对网页局部实现异步刷新. AJAX 核心 JavaScript 中使用 XMLHTTPRequest 对象(XHR)实现 AJAX 请求. AJAX 步骤 一般步骤如下: 实例化 XMLHTTPRequest 对象(注意 I

原生ajax基础知识笔记

原生ajax基础知识笔记 1.创建 XMLHttpRequest 对象 所有现代浏览器(IE7+.Firefox.Chrome.Safari 以及 Opera)均内建 XMLHttpRequest 对象. 老版本的 Internet Explorer (IE5 和 IE6)使用 ActiveXObject. 代码示例: // Creates a XMLHttpRequest object. var xhr = new XMLHttpRequest(); 兼容浏览器代码示例: var xhr; /