UNPKG

jsonp-project

Version:

"jsonp跨域请求,轻量级方法,欢迎使用。npm下载后所有前端框架都可通过import引入使用。"

54 lines (47 loc) 1.89 kB
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