目前我们正在考虑一个投放平台,可以是提供offer、广告、资讯等数据给其他应用使用。在其他应用中,用户只需要嵌入一段js代码即可展示内容:
在提供的这个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种方式来供选择,一种是返回数据格式如下:
这样在后续的js处理中可以直接使用ad_result这个变量;
另外一种是返回:
这里的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来获取数据了。
<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来获取数据了。