• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

浮光掠影

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

ajax跨域问题的另类解决方法

我们知道浏览器基于安全的考虑,AJAX只能访问本域下的资源,而不能跨域访问。也就是说,domain1.com站点中的AJAX只能访问domain1.com站点下的资源,而不能跨域访问domain2.com站点中的资源.这就是AJAX跨域问题.

但如果要访问不同域的数据时,由于浏览器的安全设置,XMLHTTP没有权限获取数据,而IFRAME没有权限将获取的数据传递给父窗口,似乎没有其它解决办法。

在网上提到的方法,不外乎这几种:

1. 如果要获取的数据位于同一个根域但是不同子域时,可以在脚本中指定document.domain为父域。

2. 如果要获取的数据位于不同的根域时,则可以在服务器上写一个脚本作为代理,由服务器上的脚本获取不同域的数据,然后传递给在同一个域中的网页。

3.借用Script的src动态属性,因为src对域没有任何限制,但这种方法的缺点是服务器返回只能是javascript代码,这样的缺陷也就限制了异域名必需是可控的。

另外,我发现还有一种办法可以解决这个问题。


我们知道,域名只不过是为了便于人们记忆ip而设立的一个助记符而已,而浏览器判断跨域也只是判断是否在一个子域内,我们完全可以自己定一个dns记录,把一个子域名指向倒我们需要的服务器ip上去。换句话说,我们可以使用一个域名,访问多个服务器。

例如:

我有一个域名是boolean.net.cn,它指向的ip是:69.89.31.51,而我想访问yahoo.com上的数据,我完全可以新建一个dns记录,指向yahoo.com的ip。我通过ping www.yahoo.com.cn获得ip地址为202.165.102.205,在自己的dns记录中新建一个dns记录yahoo,指向他的ip为 202.165.102.205,这样,我访问http://yahoo.boolean.net.cn就相当于访问yahoo网站一样了,这样的话,问题就被转移到同一个子域下的数据获取了。

关于同一个子域下的数据交换,大家可以参考http://www.lhelper.org/tech/communicate_between_domains.html中的解决办法,在这里我就不多说了。

参考页面

1. http://blog.csdn.net/conis/archive/2007/08/05/1726736.aspx

2. http://www.lhelper.org/tech/communicate_between_domains.html


文章出处:DIY部落(http://www.diybl.com/course/1_web/webjs/200798/71044.html)

posted on 2009-06-04 14:51  浮光掠影  阅读(420)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3