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;}
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;}