老早就写好了总结。今天整理发表一下。

   XMLHttpRequest对象是AJAX的核心技术,XMLHttpRequest 是XMLHTTP 组件的对象,通过这个对象。AJAX能够像桌面应用程序一样仅仅同server进行数据层面的交换。而不用每次都刷新界面,也不用每次将数据处理的工作都交给server来做;这样既减轻了server负担又加快了响应速度、缩短了用户等待的时间。

XMLHttpRequest对象是开发人员的梦想,由于可以:

在不又一次载入页面的情况下更新网页

在页面已载入后从server请求数据

在页面已载入后从server接收数据

在后台向server发送数据

XMLHttpRequest对象的方法和属性就不再这里进行简绍了,由于大家都能够再网上查到。

这里简绍一下他的使用。

他的使用有五步:

①建立XMLHttpRequest对象

②注冊回调函数

③使用open方法设置和server端的交互的基本信息

④设置发送的数据,開始和server端进行交互

⑤在回调函数中推断交互式否结束,对应是否正确,并依据须要获取server返回的数据,更新页面内容。

以下我把自己做的视频样例的JS封装代码整理的一下。给大家看一下:

<span style="font-family:KaiTi_GB2312;font-size:18px;">//使用封装方法的人仅仅关心提供http的请求方法。数据,成功,和失败的回调方法
//类的构造定义,主要职责就是新建出XMLHttpRequest对象
var MyXMLHttpRequest=function(){
//1、创建XMLHTTPRequest对象
var xmlhttprequest;
//不同浏览器的封装
if(window.XMLHttpReuqest){
//IE7,IE8,firefox,MOailla,Safari,Opera等浏览器创建
xmlhttprequest=new XMLHttpReuqest();
//些版本号的Mozilla 浏览器处理server返回的未包括XML mime-type
//头部信息的内容时会出错。因此。要确保返回的内容包括text/xml 信息。
if (xmlhttprequest.overrideMineType){
xmlhttprequest.overrideMineType("text/xml");
}
}else if(window.ActiveXObject){
//IE6。 IE6.6,IE5
var activeName=["MSML2.XMLHTTP","Microsoft.XMLHTTP"];
for(var i=0;i<activeName.length;i++){
try{
xmlhttprequest=new ActiveXObject(activeName[i]);
break;
}catch(e){ }
}
}
if (xmlhttprequest === undefined||xmlhttprequest === null){
alert("XMLHttpRequest对象创建失败");
}else{
this.xmlhttp=xmlhttprequest;
}
}; //用户发送请求的方法
MyXMLHttpRequest.prototype.send=function(method,url,data,callback,failback){
if(this.xmlhttp!== undefined && this.xmlhttp!== null){
method=method.toUpperCase();
if(method!=="GET" && method !=="POST"){
alert("HTTP请求方法必须是GET或POST! !");
return;
}
if (url===null || url===undefined){
alert("HTTP的请求地址必须设置。");
return;
}
var tempxmlhttp=this.xmlhttp;
//2、注冊回调方法(这是当server返回信息是client的处理方式)
this.xmlhttp.onreadystatechange=function(){
//5、推断和server端的交互式否完毕,还要推断server端是否正确返回了数据
//readyState 值为4 的时候。代表server已经传回全部的信息。
//能够開始处理信息并更新页面内容了
if(tempxmlhttp.readyState===4){
//表示和server端的交互已经完毕
//XMLHttpRequest 对成功返回的信息有两种处理方式:
//responseText:将传回的信息当字符串使用;
//responseXML:将传回的信息当XML 文档使用,能够用DOM 处理。 if(tempxmlhttp.status===200){
//表示server的相应代码是200。正确的返回了数据
//纯文本数据的接受方法
var responseText=tempxmlhttp.responseText;
//XML数据相应的DOM对象的接受方法
//使用的前提是,server端须要设置content-type为text/xml
var responseXML=tempxmlhttp.responseXML;
//这是对页面端JS的处理
if (callback===undefined || callback===null){
alert("没有设置处理数据正确的返回方法");
alert("返回的数据:"+responseText);
}else{
callback(responseText,responseXML);
}
}else{
if (failback ===undefined || failback===null){
alert("没有设置处理数据失败的返回方法");
alert("HTTP的响应吗:"+tempxmlhttp.status+",相依吗的文本信息:"+tempxmlhttp.statusText);
}else{
failback(tempxmlhttp.status,tempxmlhttp.statusText);;
}
}
}
};
//解决缓存的转换--添加时间戳
if (url.indexOf("?")>=0){
url=url+"&t="+(new Date()).valueOf();
}else{
url=url+"? t="+(new Date()).valueOf();
} //解决跨域的问题
if (url.indexOf("http://")>=0){
url.replace("?","&");
url="Proxy?url="+url;
}
//3、设置和server端进行交互的參数(向server发出请求)
this.xmlhttp.open(method,url,true); //send 的參数假设是以Post 方式发出的话。能够是不论什么想传给server的内容。 //只是。跟form 一样,假设要传文件或者Post 内容给server。
//必须先调用setRequestHeader 方法,改动MIME 类别。 if (method ==="POST"){
this.xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
}
//4、设置项server端发送的数据,启动和server的交互
this.xmlhttp.send(data);
}else{
alert("XMLHttpRequest对象创建失败,无法发送数据。");
}
}; MyXMLHttpRequest.prototype.abort=function(){
this.xmlhttp.abort();
};</span>

注意:

1、注冊回调方法的方式有两种:①一种是JS文件里的写法。既是Javascript既是定义函数的方式定义对应函数。

xmlhttp.onreadystatechange=function(){}

②xmlhttp.onreadystatechange=callback;须要指出的时,这个函数名称不加括号,不指定參数。

2、向server发出请求的时候的

XMLHttpRequest 可以同步或异步地返回Web server的响应,而且可以以文本或者一个 DOM 文档的形式返回内容。

对于open方法的具体解释:默觉得true的时候表示异步

对于这个对象的扩展问题:

①添加时间戳的效果,解决浏览器的缓存问题。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center">

以下这个事效果图:红框里的就是时间戳

这样能够防止网址一样来訪问缓存的问题HttRequest请求的缓存问题。

时间戳解决别的问题:如用户发帖的页面中,恶意程序来重复提交的问题

②解决跨域訪问问题。

跨域:当前网页訪问的server的域名和port不同了。就称为跨域訪问。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center">

③解决中英文乱码问题:

对于这个原理我看的是是懂非懂的,

总之:XMLHTTPRequest对象用来在后台与server进行交换数据。



AJAX核心XMLHTTPRequest对象的更多相关文章

  1. 详解AJAX核心 —— XMLHttpRequest 对象 (上)

    我要说的内容都是非常基础的内容,高手就免看了,如果看了欢迎给点意见啊.新手或者对低层还不是很了解的人可以看看,帮助理解与记忆. XMLHttpRequest 对象是AJAX功能的核心,要开发AJAX程 ...

  2. [置顶] Ajax核心--XMLHttpRequest对象

    XMLHttpRequest 对象是AJAX功能的核心,学习XMLHttpRequest对象就先从创建XMLHttpRequest 对象开始,了解在不同的浏览器中创建XMLHttpRequest 对象 ...

  3. Ajax核心--XMLHttpRequest对象

    XMLHttpRequest 对象是AJAX功能的核心,学习XMLHttpRequest对象就先从创建XMLHttpRequest 对象开始,了解在不同的浏览器中创建XMLHttpRequest 对象 ...

  4. AJAX 核心 —— XMLHTTPRequest 对象回顾

    一.AJAX概述 不使用 AJAX 的网页,如果要更新内容,需要重载整个页面. AJAX ( Asynchronous Javascript And XML ,异步 Javascript 和 XML) ...

  5. AJAX——核心XMLHttpRequest对象

    AJAX大家已经都知道了,是为了实现异步通讯,提高用户体验度,而将很多旧知识(XML,DOM,JavaScript,HTML,Jquery,Css……)重新融合的一个新的知识框架.而,XMLHttpR ...

  6. 详解AJAX核心 —— XMLHttpRequest 对象 (下)

    继续上一篇的内容上一篇关于XMLHttpRequest 对象发送对服务器的请求只说到了用Get方式,没有说Post方式的.那是因为要说Post方式就需要先说另外一个东西,那就是DOM(Document ...

  7. js进阶ajax的XMLHttpRequest对象的status和statustext属性(如果ajax和php联合使用的话:open连接服务器的第二个参数文件路径改成请求php的url即可)

    js进阶ajax的XMLHttpRequest对象的status和statustext属性(如果ajax和php联合使用的话:open连接服务器的第二个参数文件路径改成请求php的url即可) 一.总 ...

  8. Ajax技术---核心XMLHttpRequest对象

    Ajax 的全称是Asynchronous JavaScript and XML,其中,Asynchronous 是异步的意思,它有别于传统web开发中采用的同步的方式. (一)ajax技术的意义 我 ...

  9. AJAX的核心XMLHttpRequest对象

    为了实现异步通讯,提高用户体验度,而将很多旧知识(XML,DOM,JavaScript,HTML,jQuery,Css...)重新融合程一个新的知识框架.而XMLHttpRequest对象则是其中的重 ...

随机推荐

  1. expdp / impdp 用法详解(Oracle)

    一 .关于expdp和impdp     使用EXPDP和IMPDP时应该注意的事项: EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用. EXPDP和IMPDP是服务端的工 ...

  2. 00049_super关键字

    1.子父类中构造方法的调用 (1)在创建子类对象时,父类的构造方法会先执行,因为子类中所有构造方法的第一行有默认的隐式super();语句: (2)格式 调用本类中的构造方法 this(实参列表); ...

  3. API错误码设计-资料

    搜索到一篇文章:新浪微博API错误代码说明对照表 可以参考新浪微博的错误码设计思路,设计自己系统的错误码.

  4. Python之Regular Expressions(正则表达式)

    在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要.正则表达式就是用于描述这些规则的工具.换句话说,正则表达式就是记录文本规则的代码. 很可能你使用过Windows/Dos下用 ...

  5. [luoguP1131] [ZJOI2007]时态同步(贪心)

    传送门 显然是一棵树. 又显然一段一段地增加比较优. 我们可以dfs,并且尽量把每一个节点所有子树中所有节点的时间增加到一样. #include <vector> #include < ...

  6. py 爬取页面http://m.sohu.com 并存储

             usage()               opts,args = getopt.getopt(sys.argv[1:],                        usage( ...

  7. 【CCF】通信网络 简单搜索

    去重!不然有环就直接挂掉了...0分 #include<iostream> #include<cstdio> #include<string> #include&l ...

  8. 洛谷 [P2148] E&G

    SG函数的应用 首先每一组都是独立的,所以我们可以求出每一组的SG值异或出来. 那么怎么求每一组的SG值呢,网上的题解都是打表找规律,但其实这个规律是可以证明的 先看规律: x为奇数,y为奇数:SG= ...

  9. UVa10539

    http://vjudge.net/problem/UVA-10539 先打出来sqrt(n)以内的素数表,然后对于每个素数x,他对答案的贡献就是最大的p使x^p<=n,即log(x,n).注意 ...

  10. 巴蜀2904 MMT数

    Description FF博士最近在研究MMT数. 如果对于一个数n,存在gcd(n,x)<>1并且n mod x<>0 那么x叫做n的MMT数,显然这样的数可以有无限个. ...