发篇偶写的教程和大家分享一个问题___关于使用google小工具api请求自用服务器的问题
在igoogle小工具中可以做一些很简单也可以做一些很复杂的应用,其中大多数应用都是利用javascript和xml来在本地完成的,它们只是引用一个远程的数据源,然后利用google的api解析其中的内容并用特殊的方式呈现,google的api的确强大,虽然提供的功能和一般的javascript库相比少了一点,但是这些功能却都是精华中的精华,提供了许多高级特性,利用这些特性可以做出很多很有意思的应用,例如:利用grid库来做一些你很常见的游戏,俄罗斯方块?贪吃蛇?推箱子?别以为是小游戏就不会流行,很多使用igoogle的人都是技术人员,他们会对你编写程序的方法感兴趣的,而普通人也会因此回忆起儿时的情景.
进入正题,利用本地的api的确可以做不少东西,可是局限于这些事情就显得有点太简单了,小工具也可以承载大应用,你想过twiter会成为一个流量和google并肩的应用的么,看似很弱智的应用,可是却因为符合用户的快节奏的生活而流行起来,就是说在小工具中完全可以做出大的应用来,要做到这点,首先就要使小工具和第三方服务器通信,以和服务器中的cgi程序和数据库进行交互.
我实际上是想说我在使用地图api时候遇到的问题,在google map api中有一个命名空间叫做 GXmlhttp,是专门用来和服务器进行异步交互的(ajax),如果你在小工具中嵌入地图的话,当然首先就会想到这个命名空间,可是如果你把小工具以 html 方式托管在google的小工具服务器中的时候,事实上这个命名空间是不能工作的,因为它涉及到了利用ajax来请求第三方域的问题,这是一个安全问题,大多数浏览器不允许这种请求,因为其中隐藏着诸多不确定的安全因素,所以在小工具中嵌入地图时不能用这个命名空间来请求你自己服务器中的数据和程序.
既然有问题就有解决方案,解决方案有两个:
1.第一个是最容易想到的,直接以url的方式引用自己服务器中的html文件,这时候你的html页面放在自己的服务器中,它如果发出请求的话,请求的也是自己所在的服务器,所以不存在上述问题,
2.但是如果你想让自己的服务器免去承受html文件访问压力的困难的话,这里也有第二种解决方案,那就是还是以html的方式让google托管自己的小工具文件,在小工具中需要使googlemap和服务器交互时使用小工具自身提供的_IG_FetchContent()以及一系列类似的函数(请查找api文档),具体方法不详细解释,但是我认为这种方法终归比不上直接使用mapapi来的好.
到了这里很多人会问:为什么map api中的函数不能用,但是 小工具api中的函数却能用呢?这是因为小工具api中google通过一些特殊的方法实现了可以访问第三方域,我猜是使用了代理服务器的方法来实现了,也就是当你请求你自己的服务器的时候,实际上你的请求并不是直接请求的你自己的服务器,而是请求的google的服务器,google的服务器通过脚本再请求你的服务器,具体细节我也不记得了,php中好像有个函数是 file_get_content()什么的就是用来请求第三方服务器的,反正是你的请求转了一个弯才到了你的服务器上,然后又转了一个弯回到你的小工具上,所以前面说过,用mapapi自带的函数来请求速度和性能都是比较好的选择
上面提及的问题也是为什么在url方式引用的html文件中不允许使用_IG_FetchContent()函数的原因,因为这样你请求自己服务器的时候,实际上请求的是第三方的google的代理服务器,所以是不允许的,具体大家看手册吧,这个问题还是比较重要的.
本人水平有限,文采有限,不懂者加QQ:676588498 可以一起讨论,我也在参加这次比赛哦