上次提到过跨域 Ajax 的调用问题 ,这次做个总结。众所周知,Javascript 有「同源策略」的限制。但有时候偏偏又要碰到 Ajax 跨域调用的问题,这个时候就需要些「特殊」的方法使脚本正常使用。
总结下目前所能想到的一些策略,具体的可以查看 Yahoo 开发中心的 相关文档 。
使用 iframe
具体详情,可以 参看这里 。
实现的原理就是 iframe 与 父页面 进行 Javascript 通信。完全跨域操作没有测试过,但跨子域名是完全可行的。
优势(部分)
- 全部使用 Javascript 搞定
- 简单,不用学习其他语言
缺点(部分)
- 破坏 HTML 结构
- 客户端的资源占用比较大
服务器端脚本
架构可以先「盗用」 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 语言,加上后者对于客户端友好,所以在条件允许的情况下,个人还是比较偏向后者。