// jsonp=jsonpCallback &data{} (¶m)
// http://chen.com/day05/data2.php?cb=jQuery331021597226106099243_1573093100115&a=1
function ajax(obj) {
//obj 参数对象
//定义默认参数
var defaults = {
url: "#",
type: "get",
dataType: "jsonp",
data: {},
success:function(data) {
console.log(data);
}
}
//传参去覆盖默认参数
for (var value in obj) {
defaults[value] = obj[value];
}
//定义默认回调函数的名称
//"jQuery" + ( version + Math.random() ).replace( /\D/g, "" )
var version = '3.3.1';
var cbName = "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ) + '_' + (new Date().getTime());
/*
getTime 返回1970.1.1至今的毫秒数
getDay 返回一周中的某一天 0-6
getDate 返回一月中的某一天 1-31
*/
//判断参数中是否包含回调函数名称 若有则覆盖 若无则使用默认值
if (defaults.jsonpCallback) {
// ?cb=jQuery12122112121221
// dataType: xml(responseXML) text html js json jsonp:完成跨域请求(responseText)
// jsonp: 参数名 也就是cb
// jsonpCallback: 参数值 也就是jQuery12122112121221
cbName = defaults.jsonpCallback;
}
//定义参数
//https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/
//su?cb=jQuery331035550074660633935_1573090627210&wd=%E6%88%98%E5%9C%B0&_=1573090627211
var param = '';
for(var attr in defaults.data) {
param += attr + '=' + defaults.data[attr] + "&";
}
if (param) {
//substring(参数1,参数2) 参数1 起始索引(取的到) 参数2 结束索引(取不到)
param = param.substring(0, param.length - 1);
param = "&" + param;
}
//声明回调函数 调用方式 服务器响应调用
//把函数声明放置到window对象中 向window添加了一个方法 方法名称是cbName
window[cbName] = function(data) {
defaults.success(data);
}
// jsonp的原理 就是动态创建script标签
var script = document.createElement("script");
script.src = defaults.url + "?" + defaults.jsonp + "=" + cbName + param;
var head = document.getElementsByTagName('head')[0];
head.appendChild(script);
}
Internship25
最新推荐文章于 2024-09-13 09:57:53 发布