什么是 AJAX
如何发请求
- form 通过 action 发请求,不过会新开一个页面
- a 标签可以通过 href 发请求,不过会刷新页面或者新开一个页面
- img 标签可以通过 src 发请求,不过会返回一个图片
- link 标签可以通过 href 发请求,不过只能以 CSS 展示结果
- script 标签可以通过 src 发请求,通过 SRJ (Server Render JavaScript)的方式实现 JSONP,不过会返回一个 script。
AJAX 是异步的 JavaScript 和 XML
使用 XMLHttpRequest 发请求,服务器返回 XML 格式的字符串,JavaScript 解析 XML 并更新局部页面。
XMLHttpRequest 的 onreadystatechange 方法,readyState、status、responseText 属性
从 XML 到 JSON
从 XML 到 道格拉斯·克罗克福特(出书《JavaScript 语言精粹》)发明的数据交换语言 JSON。JSON 是抄袭 JS,但是是一门新语言,而它的作者还出了一本书专门说 JS 的不好的地方,😂 他与 JS 之父从没一起出场过。
JSON vs JS
- JSON 没有抄袭 function 和 undefined
- JSON 字符首尾必须是双引号
JS | JSON |
---|---|
undefined | 没有 |
null | null |
[‘a’, ‘b’] | [“a”,”b”] |
function fn() {} | 没有 |
‘frank’ | “frank” |
var a = {}; a.self = a; | 搞不定,JSON 没有变量,无法实现引用 |
{__proto__} |
没有原型 |
HTTP response 第 4 部分永远都是字符串,AJAX 一般返回符合 JSON 对象语法的字符串。
var xhr = new XMLHttpRequest() |
AJAX 的同源策略与 CORS 跨域
form 发请求可以跨域,因为是跳转到其他页面,它是不会修改页面里面的内容。但是 AJAX 不可以!因为 AJAX 不会跳转,它是可以修改页面里面的元素的。
同源策略:协议 + 域名 + 端口 一模一样才允许发 AJAX 请求
设置 Access-Cross-Allow-Origin 为其他域名,就可以让其他域名访问当前服务器的数据。
Cross Origin Resource Sharing 跨站资源共享 CORS
JS 操作请求与响应
JS 可以设置任意请求的 header
- 设置请求 header 的第一部分 xhr.open(‘GET’, ‘/xxx’)
- 设置请求 header 的第二部分 xhr.setHeader(‘content-type’, ‘x-www-form-urlencoded’)
- 设置请求 header 的第四部分 xhr.send(‘a=1&b=2’)
JS 可以获取任意响应 header
- 获取响应 header 的第一部分 xhr.status / xhr.statusText
- 获取响应 header 的第二部分 xhr.getResponseHeader() / xhr.getAllResponseHeaders()
- 获取响应 header 的第四部分 xhr.responseText