AJAX核心XMLHTTPRequest对象
老早就写好了总结。今天整理发表一下。
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对象的更多相关文章
- 详解AJAX核心 —— XMLHttpRequest 对象 (上)
我要说的内容都是非常基础的内容,高手就免看了,如果看了欢迎给点意见啊.新手或者对低层还不是很了解的人可以看看,帮助理解与记忆. XMLHttpRequest 对象是AJAX功能的核心,要开发AJAX程 ...
- [置顶] Ajax核心--XMLHttpRequest对象
XMLHttpRequest 对象是AJAX功能的核心,学习XMLHttpRequest对象就先从创建XMLHttpRequest 对象开始,了解在不同的浏览器中创建XMLHttpRequest 对象 ...
- Ajax核心--XMLHttpRequest对象
XMLHttpRequest 对象是AJAX功能的核心,学习XMLHttpRequest对象就先从创建XMLHttpRequest 对象开始,了解在不同的浏览器中创建XMLHttpRequest 对象 ...
- AJAX 核心 —— XMLHTTPRequest 对象回顾
一.AJAX概述 不使用 AJAX 的网页,如果要更新内容,需要重载整个页面. AJAX ( Asynchronous Javascript And XML ,异步 Javascript 和 XML) ...
- AJAX——核心XMLHttpRequest对象
AJAX大家已经都知道了,是为了实现异步通讯,提高用户体验度,而将很多旧知识(XML,DOM,JavaScript,HTML,Jquery,Css……)重新融合的一个新的知识框架.而,XMLHttpR ...
- 详解AJAX核心 —— XMLHttpRequest 对象 (下)
继续上一篇的内容上一篇关于XMLHttpRequest 对象发送对服务器的请求只说到了用Get方式,没有说Post方式的.那是因为要说Post方式就需要先说另外一个东西,那就是DOM(Document ...
- js进阶ajax的XMLHttpRequest对象的status和statustext属性(如果ajax和php联合使用的话:open连接服务器的第二个参数文件路径改成请求php的url即可)
js进阶ajax的XMLHttpRequest对象的status和statustext属性(如果ajax和php联合使用的话:open连接服务器的第二个参数文件路径改成请求php的url即可) 一.总 ...
- Ajax技术---核心XMLHttpRequest对象
Ajax 的全称是Asynchronous JavaScript and XML,其中,Asynchronous 是异步的意思,它有别于传统web开发中采用的同步的方式. (一)ajax技术的意义 我 ...
- AJAX的核心XMLHttpRequest对象
为了实现异步通讯,提高用户体验度,而将很多旧知识(XML,DOM,JavaScript,HTML,jQuery,Css...)重新融合程一个新的知识框架.而XMLHttpRequest对象则是其中的重 ...
随机推荐
- Ubuntu新装系统要装软件
1. 在虚拟机中新安装系统的时候,通常因为时间过了很长,软件有更新之后,安装vim的时候会出错,因此,装完系统先要做的: cd /var/lib/dpkg/updates/ ls sudo apt-g ...
- [BZOJ4776] [Usaco2017 Open]Modern Art(差分 + 思维?)
传送门 可以预处理出每种颜色的上下左右的位置,这样就框出来了一个个矩形,代表每种颜色分别涂了哪里. 然后用二维的差分. 就可以求出来每个位置至少涂了几次,如果 > 1 的话,就肯定不是先涂的, ...
- 素数判定 2(codevs 1702)
题目描述 Description 一个数,他是素数么? 设他为P满足(P<=263-1) 输入描述 Input Description P 输出描述 Output Description Yes ...
- ElasticSearch聚合入门(续)
主要理解聚合中的terms. 参考:http://www.cnblogs.com/xing901022/p/4947436.html Terms聚合 记录有多少F,多少M { "size&q ...
- ElasticSearch 中 REST API 详解
本文主要内容: 1 ElasticSearch常用的操作 2 ElasticSearchbulk命令 ES REST API elasticsearch支持多种通讯,其中包括http请求响应服务,因此 ...
- 1109 NOIP 模拟考试
NOIP2016 模拟赛 ——那些年,我们学过的文化课 背单词(word.c/cpp/pas)[题目描述]fqk 退役后开始补习文化课啦, 于是他打开了英语必修一开始背单词. 看着满篇的单词非常头疼, ...
- Peaks BZOJ 3545 / Peaks加强版 BZOJ 3551
Peaks [问题描述] 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路相连,共M条路径,每条路径有一个困难值,这个值越大表示越难走,现在有Q组询问,每组询问 ...
- 标准C程序设计七---27
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- mac 获得进程信息的方法
NSProcessInfo可以获得当前进程的信息.获得所有活动进程信息可以尝试使用下面的方法. 进程的信息可以通过ps命令得到也可以通过sysctl方法得到. 但是我总是不能获取进程的流量信息,关于这 ...
- CSS 选择器语法参考手册
转自:http://www.w3school.com.cn/cssref/css_selectors.asp CSS3 选择器 在 CSS 中,选择器是一种模式,用于选择需要添加样式的元素. &quo ...