javascript跨域请求包装函数与用法示例
本文实例讲述了javascript跨域请求包装函数与用法。分享给大家供大家参考,具体如下:
一、源码
//定义AJAX跨域请求的JSON (function(){ if(typeofwindow.$JSON=='undefined'){ window.$JSON={}; }; $JSON._ajax=function(config){ config=config[0]||{}; this.url=config.url||''; this.type=config.type||'xhr'; this.method=(this.type=='json')?'GET':config.method.toUpperCase()||'GET'; this.param=config.param||null; this.callback=config.callback||{}; this.XHR=null; if(typeofwindow._$JSON_callback=='undefined'){ window._$JSON_callback={}; } this._createRequest(); }; $JSON._ajax.prototype={ //缓存XHR请求,再次再调用时不再进行判断 _createXHR:function(){ varmethods=[ function(){returnnewXMLHttpRequest();}, function(){returnnewActiveXObject('Msxml2.XMLHTTP');}, function(){returnnewActiveXObject('Microsoft.XMLHTTP');} ]; for(vari=0,l=methods.length;i<l;i++){ try{ methods[i](); }catch(e){ continue; } this._createXHR=methods[i]; returnmethods[i](); } }, //建立XHR请求 _createRequest:function(){ return(this.type=='json')?this._setJSONRequest():this._setXHRRequest(); }, _setXHRRequest:function(){ var_this=this; varparam=''; for(variinthis.param){ if(param==''){ param=i+'='+this.param[i]; }else{ param+='&'+i+'='+this.param[i]; } } this.XHR=this._createXHR(); this.XHR.onreadystatechange=function(){ if(_this.XHR.readyState==4&&_this.XHR.status==200){ _this.callback.success(_this.XHR.responseText); }else{ _this.callback.failure('重新操作'); } }; this.XHR.open(this.method,this.url,true); this.XHR.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8"); this.XHR.send(param); }, //建立JSON请求 _setJSONRequest:function(){ varhead=document.getElementsByTagName('head')[0]; varscript=document.createElement('script'); varfun=this._setRandomFun(); var_this=this; varparam=''; for(variinthis.param){ if(param==''){ param=i+'='+this.param[i]; }else{ param+='&'+i+'='+this.param[i]; } } script.type='text/javascript'; script.charset='utf-8'; if(head){ head.appendChild(script); }else{ document.body.appendChild(script); } //data:为回调函数所需要传入的参数 //定义页面中的回调函数,如例子中的"jsonpCallback()"方法 window._$JSON_callback[fun.id]=function(data){ _this.callback.success(data); setTimeout(function(){ deletewindow._$JSON_callback[fun.id]; script.parentNode.removeChild(script); },100); }; script.src=this.url+'?callback='+fun.name+'&'+param; }, //生成随机JSON回调函数 _setRandomFun:function(){ varid=''; do{ id='$JSON'+Math.floor(Math.random()*10000); }while(window._$JSON_callback[id]) return{ id:id, name:'window._$JSON_callback.'+id } } }; window.$JSON.ajax=function(){ returnnew$JSON._ajax(arguments); } })();
二、调用方式
//调用方式 varajax=new$JSON.ajax({ url:'http://www.sina.com/api', type:'json', method:'get', param:{ bar:true }, callback:{ success:function(data){ console.log('55668',data); }, failure:function(error){ alert(errow); } } });
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript中ajax操作技巧总结》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript动画特效与技巧汇总》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。