html5中文学习网

您的位置: 首页 > 网站及特效实例 > javascript特效 » 正文

javascript学习笔记(七)Ajax和Http状态码_基础知识_

[ ] 已经帮助:人解决问题

Ajax及其工作原理VskHTML5中文学习网 - HTML5先行者学习网

AJAX 是一种与服务器交换数据无需刷新网页的技术,最早由Google公司在谷歌地图里使用,并迅速风靡。VskHTML5中文学习网 - HTML5先行者学习网

AJAX是不能跨域的,如需跨域,可以使用document.domain='a.com';或者使用服务器代理,代理XMLHttpRequest文件VskHTML5中文学习网 - HTML5先行者学习网

AJAX是基于现有的Internet标准,并且联合使用它们:VskHTML5中文学习网 - HTML5先行者学习网

XMLHttpRequest 对象 (异步的与服务器交换数据)VskHTML5中文学习网 - HTML5先行者学习网
JavaScript/DOM (信息显示/交互)VskHTML5中文学习网 - HTML5先行者学习网
CSS (给数据定义样式)VskHTML5中文学习网 - HTML5先行者学习网
XML (作为转换数据的格式)VskHTML5中文学习网 - HTML5先行者学习网

VskHTML5中文学习网 - HTML5先行者学习网

创建 XMLHttpRequest 对象VskHTML5中文学习网 - HTML5先行者学习网

所有现代浏览器(IE7+、Firefox、Chrome、Safari 以及 Opera)均内建 XMLHttpRequest 对象。VskHTML5中文学习网 - HTML5先行者学习网

创建Ajax对象:VskHTML5中文学习网 - HTML5先行者学习网

//IE6以上VskHTML5中文学习网 - HTML5先行者学习网
var oAjax = new XMLHttpRequest();VskHTML5中文学习网 - HTML5先行者学习网

//IE6VskHTML5中文学习网 - HTML5先行者学习网
var oAjax =new ActiveXObject("Microsoft.XMLHTTP")VskHTML5中文学习网 - HTML5先行者学习网
连接服务器VskHTML5中文学习网 - HTML5先行者学习网

oAjax.open(方法,url,是否异步)VskHTML5中文学习网 - HTML5先行者学习网
我们都知道,Ajax即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。所以,Ajax天生就是工作在异步模式的(异步为true,同步false)VskHTML5中文学习网 - HTML5先行者学习网

同步和异步VskHTML5中文学习网 - HTML5先行者学习网

同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。VskHTML5中文学习网 - HTML5先行者学习网
异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。VskHTML5中文学习网 - HTML5先行者学习网
(简单点说:同步就是只能一件一件事的来做,而异步就是可以多件事同时进行)VskHTML5中文学习网 - HTML5先行者学习网

发送请求send()VskHTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
VskHTML5中文学习网 - HTML5先行者学习网
<script type="text/javascript">VskHTML5中文学习网 - HTML5先行者学习网
function getDoc(){VskHTML5中文学习网 - HTML5先行者学习网
    var xmlhttp;VskHTML5中文学习网 - HTML5先行者学习网
    if(window.xmlhttpRequest){VskHTML5中文学习网 - HTML5先行者学习网
        xmlhttp=new XMLHttpRequest();VskHTML5中文学习网 - HTML5先行者学习网
    }VskHTML5中文学习网 - HTML5先行者学习网
    else{VskHTML5中文学习网 - HTML5先行者学习网
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");//for IE6VskHTML5中文学习网 - HTML5先行者学习网
    }VskHTML5中文学习网 - HTML5先行者学习网
    xmlhttp.onreadystatechange = function(){VskHTML5中文学习网 - HTML5先行者学习网
        if(xmlhttp.readyState==4&&xmlhttp.status==200){VskHTML5中文学习网 - HTML5先行者学习网
            document.getElementById("myId").innerHTML=xmlhttp.responseText;VskHTML5中文学习网 - HTML5先行者学习网
        }VskHTML5中文学习网 - HTML5先行者学习网
    }VskHTML5中文学习网 - HTML5先行者学习网
    xmlhttp.open("GET", index.php,true);VskHTML5中文学习网 - HTML5先行者学习网
    xmlhttp.send();VskHTML5中文学习网 - HTML5先行者学习网
}VskHTML5中文学习网 - HTML5先行者学习网
</script>VskHTML5中文学习网 - HTML5先行者学习网
</head>VskHTML5中文学习网 - HTML5先行者学习网
<body>VskHTML5中文学习网 - HTML5先行者学习网
    <button type="button" onclick="getDoc()">请求数据</button>VskHTML5中文学习网 - HTML5先行者学习网
</body>VskHTML5中文学习网 - HTML5先行者学习网
VskHTML5中文学习网 - HTML5先行者学习网

GET 还是 POST?VskHTML5中文学习网 - HTML5先行者学习网

与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用。VskHTML5中文学习网 - HTML5先行者学习网

然而,在以下情况中,请使用 POST 请求:VskHTML5中文学习网 - HTML5先行者学习网

无法使用缓存文件(更新服务器上的文件或数据库)VskHTML5中文学习网 - HTML5先行者学习网
向服务器发送大量数据(POST 没有数据量限制)VskHTML5中文学习网 - HTML5先行者学习网
发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠VskHTML5中文学习网 - HTML5先行者学习网
接收返回信息VskHTML5中文学习网 - HTML5先行者学习网

oAjax.onreadystatechange = function(){   //当请求状态改变时要调用的事件处理器VskHTML5中文学习网 - HTML5先行者学习网

    alert(oAjax.readystate);          VskHTML5中文学习网 - HTML5先行者学习网

}VskHTML5中文学习网 - HTML5先行者学习网
只要readyState属性的值发生变化时,便会触发一次readyStatechange事件。可以利用这个事件来检测每次状态变化后readyState的值。通常,我们只对readyState值为4的阶段感兴趣,因为这时所有数据都已经就绪,不过,必须在调用open()之前指定onreadystatechange事件处理程序才能确保跨浏览器兼容性。下面来看一个例子:VskHTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
VskHTML5中文学习网 - HTML5先行者学习网
var xhr = createXHR();VskHTML5中文学习网 - HTML5先行者学习网
xhr.onreadystatechange = function () {VskHTML5中文学习网 - HTML5先行者学习网
    if (xhr.readyState == 4) {VskHTML5中文学习网 - HTML5先行者学习网
        if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) {VskHTML5中文学习网 - HTML5先行者学习网
            alert(xhr.statusText);VskHTML5中文学习网 - HTML5先行者学习网
        } else {VskHTML5中文学习网 - HTML5先行者学习网
            alert("Request was unsuccessful: " + xhr.status);VskHTML5中文学习网 - HTML5先行者学习网
        }VskHTML5中文学习网 - HTML5先行者学习网
    }VskHTML5中文学习网 - HTML5先行者学习网
};VskHTML5中文学习网 - HTML5先行者学习网
xhr.open("get", "example.txt", true);VskHTML5中文学习网 - HTML5先行者学习网
xhr.send(null);VskHTML5中文学习网 - HTML5先行者学习网
VskHTML5中文学习网 - HTML5先行者学习网

XHR对象VskHTML5中文学习网 - HTML5先行者学习网

当XHR对象把一个HTTP请求发送到服务器的过程中会经历几个状态,直到请求被处理,然后才接收一个回应。readyState就是XHR请求的状态属性,它本身有5个属性值:VskHTML5中文学习网 - HTML5先行者学习网

0(未初始化)还没有调用open()方法VskHTML5中文学习网 - HTML5先行者学习网
1(载入)已调用send()方法,正在发送请求VskHTML5中文学习网 - HTML5先行者学习网
2(载入完成)send()方法完成,已收到全部响应内容VskHTML5中文学习网 - HTML5先行者学习网
3(解析)正在解析响应内容VskHTML5中文学习网 - HTML5先行者学习网
4(完成)响应内容解析完成,可以再客户端使用了VskHTML5中文学习网 - HTML5先行者学习网
statusVskHTML5中文学习网 - HTML5先行者学习网

   status属性表示从服务器返回的响应状态码。例如:200表示成功,404表示未找到。VskHTML5中文学习网 - HTML5先行者学习网

1字头:消息。这一类型的状态码,代表请求已被接受,需要继续处理。VskHTML5中文学习网 - HTML5先行者学习网
2字头:成功。这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。VskHTML5中文学习网 - HTML5先行者学习网
3字头:重定向。这类状态码代表需要客户端采取进一步的操作才能完成请求。VskHTML5中文学习网 - HTML5先行者学习网
4字头:客户端错误。这类状态码代表了客户端看起来可能发生错误,妨碍了服务器的处理。VskHTML5中文学习网 - HTML5先行者学习网
5字头:服务器错误。这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生VskHTML5中文学习网 - HTML5先行者学习网

另附:http状态码详解VskHTML5中文学习网 - HTML5先行者学习网

statusTextVskHTML5中文学习网 - HTML5先行者学习网

  statusText是响应返回的文本信息,仅当readyState值为3或4的时候才能使用。当readyState为其它值时视图存取statusText属性将引发异常。VskHTML5中文学习网 - HTML5先行者学习网

XHR的方法VskHTML5中文学习网 - HTML5先行者学习网

方法 描述
abort() 导致当前正在执行的请求被取消
getAllResponseHeaders() 返回包含所有响应头的名称和值的单个字符|串
getResponseHeader(name) 返回响应头中指定的名称和值
open(method,url,async,username,pwd) 设置HTTP方法(get或post)等
send(content) 发出带有指定主体内容的请求
setRequestHeader(name,value) 使用指定的名称和值设置请求头
VskHTML5中文学习网 - HTML5先行者学习网

复制代码 代码如下:
VskHTML5中文学习网 - HTML5先行者学习网
<script type="text/javascript">VskHTML5中文学习网 - HTML5先行者学习网
        var oAjax =oAjax();VskHTML5中文学习网 - HTML5先行者学习网
        alert(oAjax.readyState);//弹出"0"VskHTML5中文学习网 - HTML5先行者学习网
        oAjax.open("get","index.html",true);VskHTML5中文学习网 - HTML5先行者学习网
        alert(oAjax.readyState);//弹出"1"VskHTML5中文学习网 - HTML5先行者学习网
        oAjax.send(null);VskHTML5中文学习网 - HTML5先行者学习网
        alert(oAjax.readyState);//IE下弹出4,而firefox是2VskHTML5中文学习网 - HTML5先行者学习网
        //可以通过readystatechange事件监听VskHTML5中文学习网 - HTML5先行者学习网
        oAjax = XHR();VskHTML5中文学习网 - HTML5先行者学习网
        oAjax.onreadystatechange = function () {VskHTML5中文学习网 - HTML5先行者学习网
            alert(oAjax.readyState);//Firefox下依次是1,2,3,4但最后还会再来个1VskHTML5中文学习网 - HTML5先行者学习网
            //IE下则是1,1,3,4VskHTML5中文学习网 - HTML5先行者学习网
        };VskHTML5中文学习网 - HTML5先行者学习网
        oAjax.open("get","index.txt",true);VskHTML5中文学习网 - HTML5先行者学习网
        oAjax.send(null);VskHTML5中文学习网 - HTML5先行者学习网
</script>VskHTML5中文学习网 - HTML5先行者学习网
VskHTML5中文学习网 - HTML5先行者学习网

(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助