❗ 本文最后更新于 5922 天前,文中所描述的信息可能已发生改变,请谨慎使用。
在Ajax编程时,经常需要从服务端获取数据。通常情况下,我们是直接把要传输的数据放在response正文中,再用responseText或者responseXML来得到内容。最近偶然发现,有时候也可以把数据放在header里,而且一些情况下这样做更有优势。
header是服务器以HTTP协议传送HTML资料到浏览器前所送出的字符串,在php中我们可以这么发送自定义header:
header("author:Jerry Qu");
然后在客户端,正常的创建一个Ajax请求,所不同的地方是callback中获取数据改成:
var a = new Ajax();
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也没关系,这样用户体验要稍好一些。
本文链接:https://imququ.com/post/how-to-use-response-header.html,参与评论 »
--EOF--
发表于 2008-10-05 00:12:13,并被添加「Ajax、Header」标签。查看本文 Markdown 版本 »
Comments
Waline 评论加载中...