AJAX是什么
AJAX(Asynchronous JavaScript and XML):异步的JavaScript和XML。用 JS 发起一个请求,并得到服务器返回的内容。异步请求数据,局部更新页面内容。
window.XMLHttpRequest()
- 使用XMLHttpRequest发送请求
- 服务器返回XML格式的字符串(XML后来用JSON替代)
- JS解析XML,并局部更新页面
一个简易的AJAX发请求
1 | myButton.addEventListener('click',(e) => { |
同源策略和CORS跨域
同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的重要安全机制。目的是为了保证用户信息的安全,防止恶意的网站窃取数据。
所谓同源是指”协议+域名+端口”三者相同。
协议相同
域名相同
端口相同
同源策略限制内容有:
- Cookie、LocalStorage、IndexedDB 等存储性内容
- DOM 无法获得
AJAX 请求发送后,结果被浏览器拦截(
request.status = 0
)突破同源策略:
JSONP
- WebSocket
- CORS
- 架设服务器代理
CORS跨域:(Cross-Origin Resource Sharing)服务端设置response.setHeader('Access-Control-Allow-Origin','http://(允许访问的域名)')
就可以开启 CORS。 该属性表示哪些域名可以访问资源,如果设置通配符则表示所有网站都可以访问资源。
form表单提交
可以跨域是因为原页面用form提交到另外一个域名后,会自动刷新跳转另外一个域名,原来页面的脚本无法获得新页面的内容。
自己封装一个window.jQuery.ajax
先自己创建个jQuery
1 | window.jQuery = function (nodeOrSelector) { |
- 第一版
1 | window.jQuery.ajax = function (url, method, body, successFn, failFn) { |
1 | myButton.addEventListener('click',(e) => { |
- 优化传参
1 | window.jQuery.ajax = function ({url, method, body, headers,successFn,failFn}) { |
1 | myButton.addEventListener('click',(e) => { |
- 添加Promise功能
1 | window.jQuery.ajax = function ({url, method, body, headers}) { |
1 | myButton.addEventListener('click',(e) => { |