常用的从服务器获取信息的方式有三种:XmlHttpRequest、动态脚本注入和Multipart XHR
1、XmlHttpRequest
let xhr = new XMLHttpRequest(); // 请求成功回调函数 xhr.onload = e => { console.log('request success'); }; // 请求结束 xhr.onloadend = e => { console.log('request loadend'); }; // 请求出错 xhr.onerror = e => { console.log('request error'); }; // 请求超时 xhr.ontimeout = e => { console.log('request timeout'); }; // 请求回调函数.XMLHttpRequest标准又分为Level 1和Level 2,这是Level 1和的回调处理方式 // xhr.onreadystatechange = () => { // if (xhr.readyState !== 4) { // return; // } // const status = xhr.status; // if ((status >= 200 && status < 300) || status === 304) { // console.log('request success'); // } else { // console.log('request error'); // } // }; xhr.timeout = 0; // 设置超时时间,0表示永不超时 // 初始化请求 xhr.open('GET/POST/DELETE/...', '/url', true || false); // 设置期望的返回数据类型 'json' 'text' 'document' ... xhr.responseType = ''; // 设置请求头 xhr.setRequestHeader('', ''); // 发送请求 xhr.send(null || new FormData || 'a=1&b=2' || 'json字符串');
2、动态脚本注入
var scriptElement = document.createElement('script'); scriptElement.src = 'http://any-domain.com/javascript/lib.js'; document.getElementsByTagName('head')[0].appendChild(scriptElement); function jsonCallback(jsonString){ var data = eval('(' + jsonString + ')'); //do something } lib.js 里的内容示例: jsonCallback({"status":1,"name":"测试"});
3、Multipart XHR
通过发送一次XmlHttpRequest请求,从服务器获取到多个资源信息,根据约定的分隔符进行分离,进而呈现对应的资源信息。这种方式可以避开浏览器对http请求数量的限制