Ajax 的另类数据加载方式

传统的Ajax教材会告诉大家,利用XmlHttpRequest来异步加载数据,然后JavaScript有着和Flash一样的问题——跨域操作,面对跨域的问题我们的XmlHttpRequest似乎变得无比之脆弱,可是问题总是要解决的啊,Flash可以在需要跨域的服务器上丢下一个crossdomain.xml策略文件,而我们的JS呢?最近的工作中总结出如下经验:

方法一:接Flash之东风,实际上这不是一种好的方法,但是既然是总结还是写在这里了,大家都知道我们的Flash通过策略文件是可以跨域的,而且通过好用的ExternalInterface API我们又能让Flash和JS进行通信,这就造就了JS可以接Flash的东风来异步跨域调用服务器的数据了。

方法二:利用 iframe,其实这点和方法一是有异曲同工的效果,通过 iframe 加载跨域服务器上的一个页面,该页面里储存了JS的数据(JSON对象即可)这样通过DOM就能访问到,但是要谨记: document.domain = ""; 这里子页面和父页面的域地址要写成一样!实际上这个方法可以让服务器直接吐出一个带有数据的页面而不需要在服务器上放策略文件,这比起Flash却省事多了。

方法三:我认为也是一个很变态的方法,可能是自己从事Flash编程时间太长了吧,导致看到这些方法都觉得很奇怪,其实就是修改 <script id="my_loader" type="text/javascript" src="http://www.somedomain.com/data.js"></script> 的src属性,通过这个方法直接从服务器返回一串JS代码,代码里面包含一个回调函数,这样当脚本被异步加载后,通过浏览器编译成功并且开始执行的时候,这个回调函数就能被调用,从而实现数据的异步接收。我个人认为这个方法综合来说最好,因为服务器返回的代码量是最少的,而且方便简单。

综上所述,JS的跨域能力还是很强,应该说非常强大,后面的两种方法是经过舜子的指导来了解的,相比之下,我们的Flash在跨域问题上确实有点薄弱了,方式单一,不过却是一种简洁的方法。

loading...