利用服务器返回的header来传输数据
在Ajax编程时,经常需要从服务端获取数据。通过情况下,我们是直接把要传输的数据放在response正文中,再用responseText或者responseXML来得到内容。最近偶然发现,有时候也可以把数据放在header里,而且一些情况下这样做更有优势。
header是服务器以HTTP协议传送HTML资料到浏览器前所送出的字符串,在php中我们可以这么发送自定义header:
然后在客户端,正常的创建一个Ajax请求,所不同的地方是callback中获取数据改成:
a.get("test.php",function(){
alert(a.req.getResponseHeader("author"));
});
这样就能取到author的值了。
Javascript中跟response header有关的就两个方法:
getResponseHeader
从响应信息中获取指定的http头
语法
strValue = oXMLHttpRequest.getResponseHeader(bstrHeader);getAllResponseHeaders
获取响应的所有http头
语法
strValue = oXMLHttpRequest.getAllResponseHeaders();
通过header可以传多少数据呢?我测试了一下,在firefox中如果超过10232个英文字符,客户端就取不到数据了,IE中测试了100W个字符依然可以,所以基本还是够用的。另外,我也测试过一次发送1000个自定义header,IE和FF中都能正常取到值。如果你想得到http header的更多信息,建议阅读这篇文档。
这样做的优点呢?通常如果用Ajax来post数据,服务端返回json格式字符串的情况下,在浏览器中输入request的地址,用户就会看到那堆奇怪的代码。在页面丢失js时这种现象很常见。但是把返回数据放在header里就不会有这个问题,反正header不会展示出来。正文里可以随意的放些什么内容,哪怕是放一段自动转向JS也没关系,这样用户体验要稍好一些。

Cloudream said(Oct 06, 08 at 12:04 上午):
看上去很好用啊…… XD
小米 said(Oct 14, 08 at 9:19 上午):
呵呵,这个不错的。