创建: 2017/10/21
完成: 2017/10/23
【TODO】
对Ajax收发各类型数据制作模板
补充跨域通信(cross origin) p457
HTTP通信 |
HTTP |
超文本传输协议(HTTP,HyperText Transfer Protocol) |
HTTP通信 |
客户端发送: 请求信息
服务器端发送: 响应信息 |
请求信息 |
请求行: GET
http://www.sample.sample HTTP/1.1
head: Host: sample.sample这样【域名:内容】
信息主体: 请求信息
请求行 |
GET http://www.sample.sample HTTP/1.1 |
GET |
方法
GET,POST |
http://www.sample.sample |
URL |
HTTP/1.1 |
HTTP的版本 |
|
|
|
响应信息 |
head和响应主体和上面一样
响应行: HTTP/1.1 200 OK
响应行 |
HTTP/1.1 200 OK |
HTTP/1.1 |
HTTP版本 |
200 |
状态码 |
OK |
附加信息 |
|
成功 |
200 |
OK |
客户端错误 |
401 |
没有认证 |
403 |
接入被禁止 |
404 |
找不到请求的资源 |
408 |
请求超时 |
服务器端 |
500 |
服务器内部错误 |
503 |
服务暂时不可用 |
|
|
|
|
|
|
|
|
|
|
|
Ajax |
优点 |
.处理高速,通信量少
.异步处理
.不跳转页面,渲染快 |
|
AJAX即“Asynchronous
JavaScript + XML |
XMLHttpRequest |
|
Ajax通过XMLHttpRequest Obejct来进行数据通信 |
处理流程 |
|
生成XMLHttpRequest Obeject |
|
登陆请求的方法(method) |
|
发送请求,开始通信 |
|
|
|
|
|
生成XMLHttpRequest
对象 |
var req = new
XMLHttpRequest();
XMLHttpRequest自带对象
readyState
只可读 |
HTTP通信的状态
0 |
为初始化: 没有呼出open |
1 |
读取中: 呼出了open, 还没呼出send |
2 |
读取完成: 呼出send, 还没收到响应 |
3 |
接收响应中:
以获取response和head
还没接收信息主体 |
4 |
接收完成: 已获取所有响应信息 |
|
response
只可读 |
获取响应内容 |
responseText
只可读 |
以文本形式获取响应内容 |
responseType
可读写 |
获取/设定响应的类型
DOMString |
"string"
默认值 |
JSON Object |
"json" |
ArrayBuffer |
"arraybuffer"
带类型的数组 |
Blob |
"blob" |
Document |
"document"
HTML的Document 对象 |
|
|
|
|
|
|
|
|
|
|
|
responseXML
只可读 |
以XML对象形式获取响应内容 |
status
只可读 |
获取对于请求的HTTP状态码
成功 |
200 |
OK |
客户端错误 |
401 |
没有认证 |
403 |
接入被禁止 |
404 |
找不到请求的资源 |
408 |
请求超时 |
服务器端 |
500 |
服务器内部错误 |
503 |
服务暂时不可用 |
|
|
|
|
|
|
|
|
|
|
statusText
只可读 |
获取对于HTTP状态码的补充信息 |
timeout
可读写 |
获取/设定请求的上线时间(到时间自动终止请求)
单位: 毫秒ms |
withCredentials
可读写 |
对于cross origin 通信是否使用认证
true/false |
onreadystatechange
可读写 |
readState的值改变时回调的事件句柄 |
ontimeout
可读写 |
请求超时时候回调的事件句柄 |
|
|
XMLHttpRequest自带方法
abort() |
终止现在进行的异步通信(非同期通信) |
open(...) |
初始化HTTP请求 |
send(data) |
发送HTTP请求 |
setRequestHeader(header, value) |
增加header |
getAllResponseHeader()
send(...)成功才有效 |
获取收到的所有响应的response |
getResponseHeader(header)
send(...)成功才有效 |
获取指定响应header |
|
|
|
|
|
|
|
|
XMLHttpRequest事件句柄
readystatechange |
状态变化时 |
abort |
处理被取消时 |
error |
请求失败时 |
loadend |
不管处理有没有异常,处理完成时 |
load |
请求成功,接收到响应时 |
loadstart |
发送请求后 |
progress |
发送/接收数据时 |
timeout |
超时自动终止时 |
|
|
|
|
|
定义和服务器通信的处理 |
两种
|
req.onreadystatechange = function ()
{...}; |
|
req.addEventListener("readystatechange",
function() {...}); |
|
|
|
|
|
初始化请求 |
req.open(method, url [,async
[,user [,password]]]);
method |
HTTP方法
"GET" "POST" |
url |
请求的url |
async |
可以省略, 默认true
是否异步通信 |
user |
认证时候的用户名
可以省略(需要的时候指定) |
password |
认证时候的密码
可省略 |
|
发送请求 |
发送GET
send不带参数 |
req.send(null); |
如果要发送请求参数 |
url的末尾添加请求字符串
|
末尾加上"?" |
|
变量形式 名称=值 |
|
多个变量 "&"连接 |
|
用encodeURIComponent方法转换字符 |
|
req.open("GET",
"example.com?a=1&b=2"); |
|
|
|
发送POST
可发送内容 |
url请求字符串 |
需要设定
req.setRequestHeader("content-type",
"application/x-www-form-urlencoded") |
表单数据 |
FormData |
字符串 |
DOMString |
二进制数据 |
ArrayBufferView |
BlobObject
File Object |
Blob |
Document |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
读取响应信息 |
准备 |
发送send前设定
req.requestType = "json";
# TODO 对Ajax收发各类型数据制作模板
|
发送请求,等待响应成功 |
|
读取JSON
使用responseText |
req.addEventListener("load", function() {
jsonObj = JSON.parse(req.responseText);
});
req.send(null);
这种不用设定requestType |
读取JSON
使用response |
req.addEventListener("load", function() {
jsonObj = req.response;
});
req.responseType="json";
req.send(null);
这种要设定requestType="json"; |
|
|
|
|
|
|
|
|
|
|
|
|
cross origin
通信 |
|
# TODO 补充跨域通信(cross origin) p457 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|