ajax跨域和JS的跨域通信(Cross The Site)的几种解决方案
最近做的一个项目中需要ajax跨域取得数据,如果是在本域中确实没有问题,但是放到二级域和其他域下浏览器直接就弹出提示框:“该页正在
1.什么引起了ajax跨域不能的问题
ajax本身实际上是通过XMLHttpRequest对象来进行数据的交互,而浏览器出于安全考虑,不允许js代码进行跨域操作,所以会警告。
2.有什么完美的解决方案么?
没有。解决方案有不少,但是只能是根据自己的实际情况来选择。
具体情况有:
解决方法:
GetData.aspx再返回给a,这样就完成了一次数据请求。GetData.aspx在其中充当了代理的作用。具体可以看下我的代码。
四、这个和上个的区别就是请求是使用<script>标签来请求的,这个要求也是两个域都是由你来开发才行。原理就是JS文件注入,在本域内的a内生成一个JS标签,它的SRC指向请求的另外一个域的某个页面b,b返回数据即可,可以直接返回JS的代码。因为script的src属性是可以跨域的。具体看代码,这个也比较简单。
code:
<a href="http://www.live-share.com/files/300697/Cross_The_Site_Test_code.rar.html">http://www.live-share.com/files/300697/Cross_The_Site_Test_code.rar.html</a>
(csdn不能粘贴附件么?)
总结:
第一种情况:域和子域的问题,可以完全解决交互。
第二种情况:跨域,实现过程非常麻烦,需要两个域开发者都能控制,适用于简单交互。
第三种情况:跨域,开发者只控制一个域即可,实现过程需要增加代理取得数据,是常用的方式。
第四种情况:跨域,两个域开发者都需要控制,返回一段js代码。
PS:代码自己按照情况修改即可。
这是拿别人的参考链接,老美的文章比较多。
1. Security Considerations: Dynamic HTML
<a href="http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/sec_dhtml.asp">http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/sec_dhtml.asp</a>
2. About Cross-Frame Scripting and Security
<a href="http://msdn.microsoft.com/library/default.asp?url=/workshop/author/om/xframe_scripting_security.asp">http://msdn.microsoft.com/library/default.asp?url=/workshop/author/om/xframe_scripting_security.asp</a>
3. Cross-Domain Proxy
<a href="http://ajaxpatterns.org/Cross-Domain_Proxy">http://ajaxpatterns.org/Cross-Domain_Proxy</a>
4. Cross Domain XMLHttpRequest using an IFrame Proxy
<a href="http://manual.dojotoolkit.org/WikiHome/DojoDotBook/Book75">http://manual.dojotoolkit.org/WikiHome/DojoDotBook/Book75</a>
5. Back Button Support for Atlas UpdatePanels
<a href="http://www.nikhilk.net/BackButtonSupport.aspx">http://www.nikhilk.net/BackButtonSupport.aspx</a>
6. Cross-document messaging hack
<a href="http://blog.monstuff.com/archives/000304.html">http://blog.monstuff.com/archives/000304.html</a>
7. Building Mash-ups with "Atlas"
<a href="http://atlas.asp.net/docs/Walkthroughs/DevScenarios/bridge.aspx">http://atlas.asp.net/docs/Walkthroughs/DevScenarios/bridge.aspx</a>
8. Calling web services hosted outside of your application with “Atlas”
<a href="http://blogs.msdn.com/federaldev/archive/2006/07/31/684229.aspx">http://blogs.msdn.com/federaldev/archive/2006/07/31/684229.aspx</a>
<a href="http://www.federaldeveloper.com/Shared%20Documents/Presentations%20by%20Marc%25">http://www.federaldeveloper.com/Shared%20Documents/Presentations%20by%20Marc%</a>
20Schweigert/CallAtlasWebServiceInDifferentProject.zip
9. AJAX Tip: Passing Messages Between iframes
<a href="http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=3b03cf9d-b589-4838-806e-64efcc0a1a15">http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=3b03cf9d-b589-4838-806e-64efcc0a1a15</a>
10. OSCON Cross-site Ajax Slides
<a href="http://blog.plaxo.com/archives/2006/07/oscon_crosssite.html">http://blog.plaxo.com/archives/2006/07/oscon_crosssite.html</a>
<a href="http://www.plaxo.com/css/api/Joseph-Smarr-Plaxo-OSCON-2006.ppt">http://www.plaxo.com/css/api/Joseph-Smarr-Plaxo-OSCON-2006.ppt</a>
11. OSCON 2006: Cross-site Ajax
<a href="http://www.sitepoint.com/blogs/2006/07/28/oscon-2006-cross-site-ajax/">http://www.sitepoint.com/blogs/2006/07/28/oscon-2006-cross-site-ajax/</a>