天天看点

ajax跨域和js跨域解决方案 .

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>

继续阅读