jsonp-project
Version:
"jsonp跨域请求,轻量级方法,欢迎使用。npm下载后所有前端框架都可通过import引入使用。"
54 lines (47 loc) • 1.89 kB
JavaScript
function jsonpHandler( param = {} ){
var result = [];
for( var key in param ){
var urlData = encodeURIComponent(key) + "=" + encodeURIComponent(param[key])
// result.push( `${encodeURIComponent(key)}=${encodeURIComponent(param[key])}` )
result.push( urlData ) ;
}
return result.join('&');
}
var jsonp = function( data ){
var _self = this;
var apiUrl = data.apiUrl ? data.apiUrl :"";
var param = data.param ? data.param :{};
var cbname = data.cbname ? data.cbname :"callback";
var callback = data.callback ? data.callback :"callback";
var fn = data.fn ? data.fn :"";
var time = data.time ? data.time :2000;
// let { apiUrl , param = {} , cbname = "callback" , callback = "callback" , fn = ()=>{} , time = 2000 } = data ;
if( !apiUrl ) return;
apiUrl = ( apiUrl.indexOf( "?" )!=-1 ? apiUrl : apiUrl+"?" ) + jsonpHandler( param ) ;
// let src = `${apiUrl}&${cbname}=${callback}&_=${new Date().getTime()}`
var src = apiUrl +"&"+ cbname +"="+ callback +"&_="+ new Date().getTime();
var srcipt = document.createElement('script');
srcipt.async = true;
srcipt.src = src;
var head = document.getElementsByTagName('head')[0];
var timer = null;
window[callback] = function( data ){
fn.call( _self , data);
clearTimeout( timer );
if( srcipt ) head.removeChild( srcipt );
srcipt = null;
if( callback ) window[callback] = null;
callback = null;
}
if(time){
timer = setTimeout( function(){
fn.call( _self , {msg:"请求超时",success:false});
if( srcipt ) head.removeChild( srcipt );
srcipt = null;
if( callback ) window[callback] = null;
callback = null;
} , time )
}
head.appendChild( srcipt );
}
export default jsonp