上次提到过跨域 Ajax 的调用问题 ,这次做个总结。众所周知,Javascript 有「同源策略」的限制。但有时候偏偏又要碰到 Ajax 跨域调用的问题,这个时候就需要些「特殊」的方法使脚本正常使用。

总结下目前所能想到的一些策略,具体的可以查看 Yahoo 开发中心的 相关文档

使用 iframe

具体详情,可以 参看这里

实现的原理就是 iframe 与 父页面 进行 Javascript 通信。完全跨域操作没有测试过,但跨子域名是完全可行的。

优势(部分)

  • 全部使用 Javascript 搞定
  • 简单,不用学习其他语言

缺点(部分)

  • 破坏 HTML 结构
  • 客户端的资源占用比较大

服务器端脚本

https://friable.rocks/_/2008_04_07/1207562864.gif

架构可以先「盗用」 Yahoo 文中 的那张插图。大家也许想到变通的办法了,就是在服务器端编写类似网关的脚本。

比如获取另外个域下的 Json 输出,用 PHP 编写的部分代码如下

header('Content-type: text/javascript');
$url = 'http://x.other.net/json';
if ($content  = file_get_contents($url)) {
    echo $url;
}

很简单的代码,但对于服务器端而言,没有任何的限制。进一步的扩展,可以使用 CURL 库

优势(部分)

  • 使用没有任何限制
  • 对 Javascript 透明

缺点(部分)

  • 必须支持服务器端
  • Javascript 程序员必须了解服务器端语言
  • 服务器端脚本必须与页面在同个域内
  • 可能会加重服务器负载

由于相对比较熟悉 PHP 语言,加上后者对于客户端友好,所以在条件允许的情况下,个人还是比较偏向后者。