Posts Tagged ‘header

在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也没关系,这样用户体验要稍好一些。

查看本文实例

本文链接:http://www.imququ.com/post/how_to_use_response_header.html

--EOF--

关于我

JerryQu,当前从事前端开发,@中国北京
这里是我随便记录东西的地方~
需要找我,我的联系方式在这里»
查找QGYWebIM相关信息,请点这里»

  • PPanda sftp如何同步本地文件夹呢?
  • dron 嗯!太有用了,终于完美找回 EditPlus 的感觉了。
  • 袁源 还真的是这样。其实挺佩服微软的呀~就是都太不完善了
  • 三水清 类似功能可以使用fiddler,http://ming.sinaapp.com/?p=218
  • 呆呆 非常感谢~话说我现在想把weinre变成一个服务器,就是我在电脑上修改了,手机上访问可以直接,不知道[...]
  • 困扰了我好几天的问题,不过最后还是让我解决了,要早让我看见这个文章该多好啊,那我也不用烦恼那么久了~[...]
  • hoowolf 非常感谢你的工作!!!
  • welefen 恩,去年我们在新首页导航精准下线的时候也遇到过,当时还做了对用户影响的数据评估和分析。
  • 唠叨下 我们这边测试的时候是在刚做完 preload 后的系统上测试的,就跟刚装完操作系统后一样干净。怎么说[...]
  • gust 我是在ubuntu11.10环境下
  • gust 想用google浏览器的话可以这样 webbrowser.get('/usr/bin/google[...]
  • jin 怎么zenCoding的缩写设置呢,类似editplus下的acp配置
  • Jerry Qu @Feather,确实Shadow是基于Weinre封装的。在我这里也很慢,因为它连的是http:/[...]
  • Feather 谢谢分享,其实Adobe的Shadow产品貌似也是用这个原理来做的,不过shadow封装好,比较方便[...]
  • i am bug 感谢屈屈!