Ajax跨域问题解决方案

由于安全问题的考虑,Ajax(xmlhttprequest)默认是不支持跨域调用的。比如在www.cadal.com去请求www.test.cadal.com的数据,都是不行的。

 

解决方案有很多,总结如下:

 

参考:

 

1.利用<script>标签

Difficult to know when the content is available, no standard methodology, can be considered a "security risk".

script设置Url后自动会执行

 

example

远端:

客户端:

 

 

2.代理

Local proxy:

Needs infrastructure (can't run a serverless client) and you get double-taxed on bandwidth and latency (remote - proxy - client).

利用如动态网页ASP JSP PHP等进行代理,进行中转,缺点显而易见。

 

3.frame方法

在同一个域下的各个子域之间(非完全跨域),如果设置了document.domain,那么是可以相互之间调用js的。。利用这一点,可以在test.zzsky.cn下面放上一个页面,这个页面可以完成用ajax获取同一个子域www.test.cadal.com的数据,而在 www.cadal.com下框架这个页,这样就可以操纵被框架页来获取数据了。

 

example

远端frame:

 

客户端:

 

附:跨子域设置的规则:当两个二级域名、URL协议、端口都相同的网页,自身都通过JavaScript设置了相同的document.domain值,并且此值至少等于自身的二级域名,它们之间才可以相互作用。

 

4.对于Flash

Remote host needs to deploy a crossdomain.xml file, Flash is relatively proprietary and opaque to use, requires learning a one-off moving target programming langage.

Flash也同样出于安全考虑,存在跨域问题,可以通过在远端设置crossdomain.xml解决(貌似比较困难),也可以通LCDS设置代理访问解决这个问题。

 

 

5.JSONP技术

JSON with padding. JQuery1.2以后支持JSONP的应用,具体的函数是getJSON,调用方法如下:

JQuery官方的例子是调用Flickr的接口

其他没有什么大问题,关键是远端接口应该写点什么内容呢?

 

jsoncallback=?是关键的所在!其中"?"符号会被Query自动替换成其他的回调方法的名称,具体过程和原理我们这里不理会。我们关心的是jsoncallback=?起什么作用了?原来jsoncallback=?被替换后,会把方法名称传给服务器。我们在服务器端要做什么工作呢?服务器要接受参数jsoncallback,然后把jsoncallback的值作为JSON数据方法名称返回,比如服务器是JSP,我们会这样做:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值