JavaScript学习总结(七)Ajax和Http状态字
来源:互联网 发布:大数据时代新闻 编辑:程序博客网 时间:2024/06/10 13:41
Ajax及其工作原理
AJAX 是一种与服务器交换数据无需刷新网页的技术,最早由Google公司在谷歌地图里使用,并迅速风靡。
AJAX是不能跨域的,如需跨域,可以使用document.domain='a.com';
或者使用服务器代理,代理XMLHttpRequest文件
AJAX是基于现有的Internet标准,并且联合使用它们:
XMLHttpRequest 对象 (异步的与服务器交换数据)JavaScript/DOM (信息显示/交互)CSS (给数据定义样式)XML (作为转换数据的格式)
创建 XMLHttpRequest 对象
所有现代浏览器(IE7+、Firefox、Chrome、Safari 以及 Opera)均内建 XMLHttpRequest
对象。
创建Ajax对象:
//IE6以上var oAjax = new XMLHttpRequest();//IE6var oAjax =new ActiveXObject("Microsoft.XMLHTTP")
连接服务器
oAjax.open(方法,url,是否异步)
我们都知道,Ajax即“Asynchronous Javascript And XML
”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。所以,Ajax天生就是工作在异步模式的(异步为true,同步false)
同步和异步
同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。
异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。
(简单点说:同步就是只能一件一件事的来做,而异步就是可以多件事同时进行)
发送请求send()
<script type="text/javascript">function getDoc(){ var xmlhttp; if(window.xmlhttpRequest){ xmlhttp=new XMLHttpRequest(); } else{ xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");//for IE6 } xmlhttp.onreadystatechange = function(){ if(xmlhttp.readyState==4&&xmlhttp.status==200){ document.getElementById("?myId").innerHTML=xmlhttp.responseText; } } xmlhttp.open("?GET", index.php,true); xmlhttp.send();}</script></head><body> <button type="button" onclick="getDoc()">请求数据</button></body>
GET 还是 POST?
与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用。
然而,在以下情况中,请使用 POST 请求:
无法使用缓存文件(更新服务器上的文件或数据库)向服务器发送大量数据(POST 没有数据量限制)发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠
接收返回信息
oAjax.onreadystatechange = function(){ //当请求状态改变时要调用的事件处理器 alert(oAjax.readystate); }
只要readyState
属性的值发生变化时,便会触发一次readyStatechange
事件。可以利用这个事件来检测每次状态变化后readyState的值。通常,我们只对readyState值为4的阶段感兴趣,因为这时所有数据都已经就绪,不过,必须在调用open()
之前指定onreadystatechange
事件处理程序才能确保跨浏览器兼容性。下面来看一个例子:
var xhr = createXHR();xhr.onreadystatechange = function () { if (xhr.readyState == 4) { if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) { alert(xhr.statusText); } else { alert("Request was unsuccessful: " + xhr.status); } }};xhr.open("get", "example.txt", true);xhr.send(null);
XHR对象
当XHR对象把一个HTTP请求发送到服务器的过程中会经历几个状态,直到请求被处理,然后才接收一个回应。readyState
就是XHR请求的状态属性,它本身有5个属性值:
0(未初始化)还没有调用open()方法1(载入)已调用send()方法,正在发送请求2(载入完成)send()方法完成,已收到全部响应内容3(解析)正在解析响应内容4(完成)响应内容解析完成,可以再客户端使用了
status
status属性表示从服务器返回的响应状态码。例如:200表示成功,404表示未找到。
http状态码
1字头:消息。这一类型的状态码,代表请求已被接受,需要继续处理。
2字头:成功。这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。
3字头:重定向。这类状态码代表需要客户端采取进一步的操作才能完成请求。
4字头:客户端错误。这类状态码代表了客户端看起来可能发生错误,妨碍了服务器的处理。
5字头:服务器错误。这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生
另附:http状态码详解
w3cschool HTTP 状态消息:http://www.w3school.com.cn/tags/html_ref_httpmessages.asp
statusText
statusText
是响应返回的文本信息,仅当readyState
值为3或4的时候才能使用。当readyState
为其它值时视图存取statusText
属性将引发异常。
XHR的方法
<script type="text/javascript"> var oAjax =oAjax(); alert(oAjax.readyState);//弹出"0" oAjax.open("get","index.html",true); alert(oAjax.readyState);//弹出"1" oAjax.send(null); alert(oAjax.readyState);//IE下弹出4,而firefox是2 //可以通过readystatechange事件监听 oAjax = XHR(); oAjax.onreadystatechange = function () { alert(oAjax.readyState);//Firefox下依次是1,2,3,4但最后还会再来个1 //IE下则是1,1,3,4 }; oAjax.open("get","index.txt",true); oAjax.send(null);</script>
to be continued……
- JavaScript学习总结(七)Ajax和Http状态字
- JavaScript学习总结(七)Ajax和Http状态字
- JavaScript学习总结(七)Ajax和Http状态字
- javascript Ajax 学习总结
- 七、HTTP应答状态
- JavaScript学习(七)
- JavaScript学习(七)
- (HTTP状态码)Ajax status和statusText状态对照表
- 【JavaScript】AJAX总结(异步JavaScript和XML)
- Javascript知识点总结(七)
- Javascript学习总结-DOM编程-(七)
- ajax概念 HTTP状态...
- Java Servlet和JSP教程:七、HTTP应答状态
- javascript学习(七)— 函数定义和调用
- JavaScript学习要点(七)
- javascript学习(七)对象
- 【前端知识点】你所不了解的Ajax和Http状态字
- JavaScript学习总结(七)——JavaScript函数(function)
- JavaScript、jQuery、HTML5、Node.js实例大全-读书笔记3
- java自带线程池和队列详细讲解
- javascript垃圾收集知识点概要(三)
- 应用程序的生命周期
- javascript垃圾收集知识点概要(二)
- JavaScript学习总结(七)Ajax和Http状态字
- ios如何设置私有变量
- ubuntu 14.04lts 安装mysql
- Ubuntu 设置环境变量
- js 实现子页面和打开它的父页面同时刷新
- 解决Eclipse调试真机时出现adb refused request: closed
- Java中异常处理进阶篇(一)
- Java中的Enum的使用与分析
- jfreechart乱码解决方案