创建: 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 |
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|