日期:2014-05-16  浏览次数:20717 次

AJAX 跨域总结

AJAX 跨域总结
2010年12月23日
  AJAX的使用方面:使用ajax的跨域访问的问题,经过任务提醒项目后,总结出以下五种方式:
  i.          使用Jquery来加载javascript的方式:如,         jQuery.ajax({           type: "GET",           timeout:this.ajaxRequestTimeout,           url: this.userTaskIsReadUrl,           dataType: "script",           cache:false,           async:true,           global:false,           success:function(){}           } });           注:此方法需要远程url返回的是js代码,我理解的是,她它原理是将远程的js代码加载到本页来执行,而非直接访问远程数据,所以不存在跨域问题,不过至于参数type: "GET",这个用get和用post会有什么不同,分别能起到什么作用,还不是很理解。                ii.          采用iframe方式:如, 假如我需要在activePage.html页面使用跨域访问,那先新建一个静态页ajaxproxy.html,在此页面里写ajax方法,然后再在activePage.html页中将ajaxproxy.html页面通过iframe方式引进来 iframe的ID为iframeId,然后在页面使用代码 var proxy=document.getElementById('iframeId').contentW indow;使用变量proxy就可以操作ajaxproxy.html里面的ajax函数了,实现了跨域,但貌似ajaxproxy.html文件必须和要跨的域在同一域下。               iii.          采用java的方式,在本地新建一个jsp文件,在jsp文件里面采用readURl的方式去访问远程url,然后在需要跨域的页面里采用ajax调用本地的这个jsp即可实现跨域。
  iv.          貌似添加js代码:document.domain = "duowan.com";可以实现一级域名下面的子域名间跨域。
  v.          还有一种方法和第一种方法一样,只不过动态加载js是要自己写,而不是采用jquery,拷贝老大的代码如下:   function dynamicLoadScript(scriptUrl,onloadFunction){        var scriptBlock  = document.createElement("script");        scriptBlock.src = scriptUrl; scriptBlock.type = "text/javascript";        scriptBlock.language = "javascript";        if(onloadFunction && isIEBrowser()){               scriptBlock.onreadystatechange = function(){                 if(scriptBlock.readyState=='loaded') onloadFunction();          };        }else if(onloadFunction){               scriptBlock.onload = function(){onloadFunction();};} document.getElementsByTagName("head")[0].appendChi ld(scriptBlock); return scriptBlock;}