AJAX的缺陷以及解决方案

目前我们正在考虑一个投放平台,可以是提供offer、广告、资讯等数据给其他应用使用。在其他应用中,用户只需要嵌入一段js代码即可展示内容:
<script language="javascript" type="text/JavaScript"> 
var pid= 'mm_10011550_0_0';
var s =0;
var n=5;
var tid ="ilike_stype_0001";
var rad= true;
var redkey = false;
var ts = false;
var show_desc = true;
var show_seller = false;
var title_color = '0000FF';
var desc_color = '030000';
var price_color = 'CC0000';
var seller_color ='E6E6E6';
var bg_color='FAD8D1';
var border_color='C52509';
var markId= 'test';
</script>
<script language="javascript" src="http://*/ui/cm.js"></script>

在提供的这个cm.js中需要去获取我们服务器上提供的数据,然后通过js去把内容转换为html代码。

这个地方重点不是在js转换为html代码上,而是去获取服务器提供的数据。这里很容易想到的就是Ajax去获取内容了,但Ajax的缺陷就是不能跨域,而我们有很多需求是需要跨域,就是需要向外面投放内容。
[b]AJAX必须是同域名访问[/b],二级域名不同也不可以,如果是list.com.com,那么Ajax请求的url也必须是list.com.com,而不能是search.com.com。

[b]Ajax的替代解决方案[/b]
所以需要提供另外一种方案,这里使用的是JSONP这种方案,关于JSONP的介绍,可以参考下面这个链接http://baike.baidu.com/view/2131174.htm?fr=ala0_1。
简单来说提供2种方式来供选择,一种是返回数据格式如下:
var ad_result={...};

这样在后续的js处理中可以直接使用ad_result这个变量;

另外一种是返回:
callback({...});

这里的callback是用户传入的参数。

第一种方式需要保证ad_result在后续处理之前没有被修改过,另外如果没有接口没有返回结果,那么还是需要判断ad_result是否已经存在,易用性上要多考虑一下。

第二种方式,这个callback是需要用户传入一个参数的,需要用户一定要指定,调用的url类似http://....&cb=callback,那么在Controller中需要接收这个cb参数,并返回给调用方。

第二种方式应该比较不错,我们不需要对script的加载是否完成做判断,如果已经完成了,会自动去调用callback函数。

后台返回的数据格式也就是以下4种:
(1)JSONP
(2)JSON
(3)HTML
(4)XML
上面的解决方案是针对JSONP的,HTML最简单了,嵌入一个iframe,其他的都不用考虑;JSON是可以更灵活的让同域名用户使用,适用范围比较狭窄,目前由于投放系统的域名和其他系统不一致,所以JSON的应用应该很少,除非其他应用在后台用httpclient获取该内容。xml应该也是通过httpclient来获取数据了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值