网上收集修改的原生jsonp代码

前端之家收集整理的这篇文章主要介绍了网上收集修改的原生jsonp代码前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. ;(function(){
  2. varformatParams=function(data){//格式化参数
  3. vararr=[];
  4. for(varnameindata){
  5. arr.push(encodeURIComponent(name)+'='+encodeURIComponent(data[name]));
  6. }
  7. returnarr.join('&');
  8. }
  9. varjsonp=function(options){
  10. options=options||{};
  11. if(!options.url||!options.callback){
  12. thrownewError("参数不合法");
  13. }
  14.  
  15. //创建script标签并加入到页面
  16. varcallbackName=('jsonp_'+Math.random()).replace(".","");
  17. varoHead=document.getElementsByTagName('head')[0];
  18. varparams="";
  19. if(options.data){
  20. options.data[options.callback]=callbackName;
  21. params+=formatParams(options.data);
  22. }else{
  23. params+=options.callback+"="+callbackName;
  24. }
  25. varoS=document.createElement('script');
  26. oHead.appendChild(oS);
  27.  
  28. //创建jsonp回调函数
  29. window[callbackName]=function(json){
  30. oHead.removeChild(oS);
  31. clearTimeout(oS.timer);
  32. window[callbackName]=null;
  33. options.success&&options.success(json);
  34. };
  35.  
  36. //发送请求
  37. oS.src=options.url+'?'+params;
  38.  
  39. //超时处理
  40. if(options.time){
  41. oS.timer=setTimeout(function(){
  42. window[callbackName]=null;
  43. oHead.removeChild(oS);
  44. options.fail&&options.fail({message:"超时"});
  45. },options.time);
  46. }
  47. };
  48. window.jsonp=jsonp;
  49. })();
  50. //调用方法
  51. /*jsonp({
  52. url:"http://www.baidu.com",callback:"callback",//跟后台协商的接收回调名
  53. data:{id:"1000120"},success:function(json){
  54. alert("jsonp_ok");
  55. },fail:function(){
  56. alert("fail");
  57. },time:10000
  58. })*/

原文链接http://www.html-js.com/article/JavaScript-based-implementation-of-AJAX-JSONP-and-native-JS-DOM-finishes-loading-events

猜你在找的Json相关文章