游客发表
ASP里往浏览器写东西,把信最直接的息写就是 Response.Write。一行代码,浏览字符串就往HTML流里塞。器上我刚接触ASP那会儿,应使用写的把信第一个能跑起来的页面就是 <% Response.Write("hello") %>,浏览器上蹦出个hello,息写当时觉得这玩意儿比静态HTML有意思多了。浏览
但写信息到浏览器这件事,器上远不止一个Write方法那么简单。应使用你得搞清楚,把信ASP是息写在服务器端跑的,生成的浏览HTML最终要经过IIS发给客户端。Response对象就是器上那个出口。除了Write,应使用还有Response.BinaryWrite,用来输出二进制数据,比如图片流。我做过一个项目,用户上传的图片存在数据库里,展示的时候就用BinaryWrite把字节数组直接吐出来,浏览器收到后按图片渲染。那次踩了个坑:Response.ContentType没设对,浏览器把图片当文本显示,满屏乱码。
说到ContentType,这玩意儿挺关键。默认是text/html,但你要输出JSON、XML、纯文本,都得改。有一回我写接口,返回JSON字符串,忘了改ContentType,前端jQuery的$.ajax死活解析不了,因为浏览器按HTML处理了。后来加上Response.ContentType = "application/json"才正常。这个细节新手很容易忽略。
再说编码问题。ASP默认是Response.CodePage和Response.Charset控制的。中文乱码是经典坑。我见过有人用Response.Write输出中文,页面显示问号,折腾半天以为是数据库问题,其实是没设Response.Charset = "gb2312"或者"utf-8"。现在一般用UTF-8,但老系统里gb2312还不少。我自己的习惯是页面顶部加 <%@ Language="VBScript" CodePage="65001"%>,再配合Response.Charset="utf-8",基本能搞定。
还有个东西叫Response.Buffer。默认是True,意思是服务器先把输出攒着,等页面全部处理完再一次性发给浏览器。这有啥好处?你可以在Response.Write之后还能调Response.Redirect,不然会报“HTTP头已发送”的错误。我当年写登录跳转,先Write了“登录成功”,再Redirect,直接崩。后来把Buffer设True,或者干脆把Write去掉,才解决。Buffer设False的话,每句Write立刻发出去,适合那种要实时显示进度的长页面,但性能差点。
直接往浏览器写HTML标签也是常事。比如 有个冷门但好用的: 最后提一嘴 总之,ASP往浏览器写信息,核心就是Response对象那几个属性和方法。Write是主力,ContentType、Charset、Buffer是辅助,HTMLEncode是保险。写多了就发现,坑都在细节里,跟写其他服务端语言差不多,只是ASP更老派,更直接。 随机阅读 热门排行 友情链接Response.Write "",拼字符串生成表格。但这样写多了,代码里全是引号转义,看着头疼。我后来喜欢用
<%= %>这种短标签,等价于Response.Write,但混在HTML里更顺眼。不过要注意,<%= %>不能用在If块里直接嵌套,得拆开写。 Response.Write可以配合Server.HTMLEncode,把用户输入里的<、>转义掉,防止XSS。我见过一个留言板,用户提交<script>,直接Write出来,页面弹窗不断。加上Server.HTMLEncode就老实了。这算安全意识,但很多ASP老代码里根本没有。Response.End。它强制停止后续代码执行,把缓冲区内容发出去。有时候你Write完想立刻停,就用它。但Response.End会抛一个ThreadAbortException,虽然ASP里一般被吞掉,但在try...catch里会捕获到,搞得人莫名其妙。我一般用Response.Flush加Response.End,或者干脆用Response.Redirect代替。