前端重点知识整理(JavaScript)五:ajax
来源:互联网 发布:淘宝助理怎么拆分订单 编辑:程序博客网 时间:2024/06/14 21:28
XHR的用法
Ajax技术的核心是XMLHttpRequest对象(XHR)。
用法看下面的代码
var xhr = new XMLHttpRequest();xhr.onreadystatechange = function(){ if ( xhr.readyState == 4){//已经调用open()、send(),并接收到全部响应数据,可以在客户端使用了 if((xhr.status >= 200 && xhr.status < 300) || chr.status == 304){//304表示可以直接使用浏览器中缓存的版本 alert(xhr.responseText); } else { alert("Request was unsuccesful: " + xhr.status); } }};xhr.open("get", "example.txt", true);//是否异步发送请求的布尔值xhr.send(null);//不需要通过请求主体发送数据
HTTP头部信息
每个HTTP请求和响应都会有响应头部信息。
Accept:浏览器能处理的内容类型
Accept-Charset
Accept-Encoding
Accept-Language
Connection
Cookie
Host
Referer:发出请求的页面的URI
User-Agent:浏览器的用户代理字符串
这里顺带说一下常用的状态码
200 OK 一切正常,对GET和POST请求的应答文档跟在后面
201 Created 服务器已经创建了文档,Location头给出了它的URL。
202 Accepted 已经接受请求,但处理尚未完成。
301 Moved Permanently 客户请求的文档在其他地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL。
302 Found 类似于301,但新的URL应该被视为临时性的替代,而不是永久性的。
304 Not Modified客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。
305 Use Proxy客户请求的文档应该通过Location头所指明的代理服务器提取
401 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
404 请求失败,请求所希望得到的资源未被在服务器上发现。
500 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器的程序码出错时出现。
503 由于临时的服务器维护或者过载,服务器当前无法处理请求。通常,这个是暂时状态,一段时间会恢复
GET/POST
GET
get是从服务器上获取数据,如下面的代码
xhr.open("get", "exapmle.php?name1=value1&name2=value2","true);
Post
post是向服务器传送数据,如下面的代码
xhr.open("post", "postexapmle.php","true);xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");var form = document.getElementById("user-info");//表单提交时的内容类型xhr.send(serialize(form));
或者
xhr.open("post", "postexapmle.php","true);var form = document.getElementById("user-info");//表单提交时的内容类型xhr.send(new FormData(form));
区别
- GET传送的数据量较小,不能大于2KB;POST传送的数据量较大,一般被默认为不受限制。
- GET请求能够被缓存,会保存在浏览器的浏览记录中;POST不可以
- GET查询字符串会显示在地址栏的URL中,不安全;POST数据不会显示在地址栏中
跨域
什么是跨域
什么是跨域?跨域是指从一个域名的网页去请求另一个域名的资源。比如从http://www.baidu.com/ 页面去请求 http://www.google.com 的资源。跨域的严格一点的定义是:只要 协议,域名,端口有任何一个的不同,就被当作是跨域。
CORS
A上的页面获取B上的资源,浏览器会检查服务器B的HTTP头(HEAD请求),如果Access-Control-Allow-Origin中有A,或者是通配符*,浏览器就会允许跨域。这叫CORS(Cross-Origin Resource Sharing)
IE8中引入了XDR类型,实现跨域通信
var xdr = new XDomainRequest();xdr.open("get", "http://www.somewhere-else.com/page/","true);xdr.send(null);
其他浏览器都通过XMLHttpRequest对象实现了对CORS的原生支持,无需像IE里一样额外编写代码就可以触发这个行为。
图像ping
<img>
能不受限制地从其他域加载资源。这是与服务器进行简单、单向的跨域通信的一种方式
var img = new Image();img.src = "http://www.somewhere-else.com/test?name=Nicholas";
JSONP
JSON with padding(填充式JSON/参数式JSON),即被包含在函数调用中的JSON。JSONP由回调函数和数据组成。回调函数是当相应到来时应该在页面中调用的函数。数据时传入回调函数中的JSON数据。看下面的代码
function handleResponse(reponse){ //JSON数据}var script = document.createElement("script");script.src = "http://www.somewhere-else.com/test?callback=handleResponse";document.body.insertBefore(script, document.body.firstChild);
<script>
能不受限制地从其他域加载资源。这是一种支持在浏览器与服务器之间双向通信的方法。但也存在不安全的问题。
Comet
Comet是对Ajax的进一步扩展,让服务器几乎能够实时地向客户端推送数据。实现Comet的手段有长轮询和HTTP流(只使用一个HTTP连接)。
Web Sockets
Web Sockets是一种新浏览器API,是一种与服务器进行全双工、双向通信的信道。它不使用HTTP协议,而使用一种自定义的协议。这种协议专门为快速传输小数据设计,适合用于移动端。
var socket = new WebSocket("ws://www.example.com/server.php");socket.send("Hello world");
参考
《JavaScript高级程序设计(第3版)》
- 前端重点知识整理(JavaScript)五:ajax
- 前端重点知识整理(JavaScript)一:数组与字符串
- 前端重点知识整理(JavaScript)三:闭包
- 前端重点知识整理(JavaScript)二:事件
- 前端重点知识整理(JavaScript)四:对象及继承
- 前端重点知识整理(CSS)
- 前端重点知识整理(算法等基础知识)
- 【前端知识点】CSS知识部分重点整理
- Javaweb重点知识整理
- C++重点知识整理
- Linux重点知识整理
- c#重点知识解答(五)
- c#重点知识解答(五)
- JavaScript 脚本语言 重点整理
- c#重点知识解答(五 代理:一)
- flash学习笔记(五)--关于XML知识【重点】
- 前端知识整理
- 前端面试知识整理
- 导入.so包的一些坑
- Hibernate优化
- Collection集合和map集合的种类区分
- one
- PHP中的魔术方法总结
- 前端重点知识整理(JavaScript)五:ajax
- 杭电3037Saving Beans
- activity生命周期理解
- LeetCode | Construct Binary Tree from Inorder and Postorder Traversal
- Java网络编程学习笔记(六)服务器Socket
- 【嵌入式】字符驱动开发框架
- 详解Qt动画框架(2)--- 实现网易云音乐tag切换
- 用Java模拟网卡、声卡继承PIC接口,实现网卡、声卡能与主板连接
- C语言实现字节流与十六进制字符串的相互转换