Blog Email GitHub

04 Nov 2010
AJAX Cross Domain

今天下午忙了半天,才深刻ajax不能跨域带来的影响。众所周知,浏览器为了安全,禁止了ajax跨域。即使host相同,port不同,也一样禁止访问。为了能够ajax能够跨域访问,也有很多方法:

  • JSONP(JSON with padding)。这种方法利用的就是<script>标签的src属性可以引用跨域的文件,从而达到跨域访问js。
  • 在服务器端,写个cgi通过代理的形式来访问。
  • flash也是可以来帮助实现跨域。
  • 另外,如果根域名相同子域名不同,可在同一页面的不同iframe中通过设置相同的document.domain,也能实现js相互访问,从而跨域

我综合比较了下,觉得JSONP相对而言还是比较简单、完美的,jQuery也实现了比较好的封装:

  • $.getJSON(url, paramaters, callback),如果在调用时,url结尾加上"?callback=?"query string便可以实现JSONP的访问。
  • $.ajax(),在option中指定dataType为jsonp,便可以实现,也可以通过jsonp来指定query string的key,通过jsonpCallback指定调用函数的名称。

不过jsonp也是有缺点,如果调用的url返回的是xml就无能为力。不过如果返回结果类型能自己控制的,jsonp真的是一个很不错的ajax跨域解决方案。