知识点
- 对象传递参数:参数过多且不固定,使用对象传递(无需考虑参数顺序,个数)
简单版:实现ajax请求的公共方法,参数过多且不固定,使用对象传递参数
用到自制函数createXHR();
[x] 设置对象传参的初始值
12345678910//设置初始值var _default = {url: "",type: "get",dataType: "json", //->请求回来的内容格式,“json”:JSON格式的对象;“txt”:字符串或JSON格式的字符串async: true,data: null, //->请求主体的内容(post方式)getHead: null, //->readyState===2时执行的回调方法success: null //->readyState===4时执行的回调方法}[x] 用户的值覆盖默认值
12345for (var key in options) {if (options.hasOwnProperty(key)) { //只遍历私有的,防止object原型上扩展自己方法_default.key = options[key];}}[x] 判断是否是get请求方式:需要清除缓存
12345if (_default.type === "get") {//->url有?没_default.url.indexOf("?") >= 0 ? _default.url += "&" : _default.ulr += "?"; //indexOf返回查找项位置,或-1_default.url += "_=" + Math.random();}[x] send Ajax
12345678910111213141516171819202122var xhr = createXHR();xhr.open(_default.type, _default.url, _default.async);xhr.onreadystatechannge = function() {if (/^2\d{2}$/.test(xhr.status)) {//->readyState===2时做些操作,保证ajax时异步请求if (xhr.readyState === 2) {if (typeof _default.getHead === "function") {_default.getHead.call(xhr);}}//->readyState===4时做些操作if (xhr.readyState === 4) {var value = xhr.responseText;//如果传递参数值是json,说明获取的内容是Json对象if (_default.dataType === "json") {value = "JSON" in window ? JSON.parse(value) : eval("(" + value + ")");}_default.success && _default.success.call(xhr, value);}}}xhr.send(_default.data);
完整代码
注意点
- 用到自制函数createXHR;
- 变成私有方法
- 在外面使用私有方法时,将私有方法变成全局
|
|