CSSHttpRequest : cross domain ajax request for easy
Posted on 2009-03-20 13:57 sharplife 阅读(540) 评论(1) 编辑 收藏 举报异步http请求的跨域问题,google一下已经有好几种解决方案了,像是JSONP、window.name等方式,没细看,感觉都挺麻烦的。
无意中看到一种借用CSSHttpRequest的方式(相对应于XmlHttpRequest),借助于web页面对css的请求无domain限制的原理,在server端将需要的数据编码成css方式返回给client,而client借助js来解码数据并执行相应操作,ok啦,简单、方便。http://nb.io地址可能是访问不了的,把文章贴出来(google):
- Cross-browser —supports IE6+, Firefox 2+, Safari 3+, iPhone.
- 100% JavaScript —no Flash required.
- Small —2.4KB minified.
Like JavaScript includes, this works because CSS is not subject to the same-origin policy that affects XMLHttpRequest. CSSHttpRequest functions similarly to JSONP , and is limited to making GET requests. Unlike JSONP, untrusted third-party JavaScript cannot execute in the context of the calling page.
A request is invoked using the CSSHttpRequest.get(url, callback) function:
CSSHttpRequest.get(
function(response) { alert(response); }
Data is encoded on the server into URI-encoded 2KB chunks and serialized into CSS rules with a modified data: URI scheme. The selector should be in the form #c<N> , where N is an integer index in [0,]. The response is decoded and returned to the callback function as a string:
#c0 { background: url(data:,Hello%20World!); }
#c1 { background: url(data:,I’m%20text%20encoded%20in%20CSS!); }
#c2 { background: url(data:,I%20like%20arts%20and%20crafts.); }
CSSHttpRequest * is open source under an Apache License (Version 2.0).
* Or as Eric refers to it, AJACSS (slightly more electro). * Or as Eric refers to it, AJACSS (slightly more electro).
Examples Examples.
- Hello World
- Lorem Ipsum
- Time (text)
- Time (JSON)
- Flickr tag search (JSON)
源码在github上的下载地址:http://github.com/nbio/csshttprequest/tree/master, 目前有Python/Ruby/PHP的server端实现(即编码功能),抽时间可以做一下其他实现,如.NET