;(function(){ varformatParams=function(data){//格式化参数 vararr=[]; for(varnameindata){ arr.push(encodeURIComponent(name)+'='+encodeURIComponent(data[name])); } returnarr.join('&'); } varjsonp=function(options){ options=options||{}; if(!options.url||!options.callback){ thrownewError("参数不合法"); } //创建script标签并加入到页面中 varcallbackName=('jsonp_'+Math.random()).replace(".",""); varoHead=document.getElementsByTagName('head')[0]; varparams=""; if(options.data){ options.data[options.callback]=callbackName; params+=formatParams(options.data); }else{ params+=options.callback+"="+callbackName; } varoS=document.createElement('script'); oHead.appendChild(oS); //创建jsonp回调函数 window[callbackName]=function(json){ oHead.removeChild(oS); clearTimeout(oS.timer); window[callbackName]=null; options.success&&options.success(json); }; //发送请求 oS.src=options.url+'?'+params; //超时处理 if(options.time){ oS.timer=setTimeout(function(){ window[callbackName]=null; oHead.removeChild(oS); options.fail&&options.fail({message:"超时"}); },options.time); } }; window.jsonp=jsonp; })(); //调用方法 /*jsonp({ url:"http://www.baidu.com",callback:"callback",//跟后台协商的接收回调名 data:{id:"1000120"},success:function(json){ alert("jsonp_ok"); },fail:function(){ alert("fail"); },time:10000 })*/
原文链接:http://www.html-js.com/article/JavaScript-based-implementation-of-AJAX-JSONP-and-native-JS-DOM-finishes-loading-events
原文链接:https://www.f2er.com/json/289965.html