YUI学习笔记(1)

YUI学习笔记(1)

by xujiwei (http://www.xujiwei.com/)

今天开始学习 YUI,加强一下对 JavaScript 的理解。

1. 命名空间 YAHOO.namespace(yahoo.js)

YUI 中使用了命名空间的概念,在 JS 中使用命名空间是为了模块以及代码组织清晰的需要,通过使用命名空间可以将功能相似或同一模块中的函数、变量等放到同一个命名空间下。

其实 JS 中的命名空间就是一个嵌套的对象而已,即子命名空间相当于父命名空间中的一个属性,它本身也是一个对象,这样子命名空间也可以有自己的子命名空间。

在 YUI 中,命名空间的格式与 C# 中类似,是以点号分隔的字符串,可以使用 YAHOO 对象的静态方法 namespace 来创建命名空间,需要注意的是,以 namespace 方法创建命名空间时,所有的对象都是附加在 YAHOO 这个对象上的,如果调用 namespace 方法创建一个“com.xujiwei.ajax”这样的命名空间,其中 ajax 的完整路径将是 YAHOO.com.xujiwei.ajax,而不是 com.xujiwei.ajax,也就是说 namespace 不会产生新的顶层对象,一切以 YAHOO 对象为基础。

namespace 方法接受一个或多个字符串来生成命名空间,但是它只返回最后一个参数所代表的命名空间的最后一个域的对象,例如使用 namespace("com.xujiwei.js", "com.xujiwei.ajax") 时它的返回值是代表 js 



阅读全文 »

Learn HTTP 1.1 Status Code Part.5

Learn HTTP 1.1 Status Code Part.5

by xujiwei(http://www.xujiwei.com/)

前一篇介绍了 4xx 系列状态码 中 406 到 417,这篇接着讲剩下的 5xx 系列。

7. 5xx 系列内部服务器错误

在 服务器处理请求时出问题了,服务器可以发一个 5xx 系列错误码给客户端,表示服务器在处理请求的时候出问题了,问题是出在服务器身上而不是客户端身 上。另外,服务器如果发送了 5xx 系列的状态码,除非客户端是使用的 HEAD 方法,否则服务器还应该在响应中给出错误的描述、原因以及解决方法 等,客户端可以把这些东西给用户看,让用户知道是什么原因导致了请求出错。

不过通常情况下,用户在收到 5xx 系列错误码的同时,是不会 收到导致错误的详细技术信息的,这是为了保护服务端程序安全的需要。服务器一般会返回一个页面描述所出的错误是由什么原因引起的,而不涉及详细技术信息。 例如在 ASP.NET 中,可以在 web.config 中的 customErrors 节配置自定义错误的显示方式,有 On、Off、 RemoteOnly 三种方式,可以根据具体的需要来设置,像 RemoteOnly 就会给本地开发者显示详细的错误信息以及调试信息,而对远程访问 者则会只显示服务器运行时出现错误,没有详细的调试信息。…

阅读全文 »

Learn HTTP 1.1 Status Code Part.4

Learn HTTP 1.1 Status Code Part.4

by xujiwei(http://www.xujiwei.com/)

前一篇介绍了 4xx 系列状态码 中 400 到 405,这篇接着讲剩下的 4xx 系列。

6.7. 406 Not Acceptable

客 户端在收到 406 Not Acceptable 状态码时,一般是因为服务器在处理客户端请求时,找不到对应客户端发送过来的请求头部 的 Accept 字段中列举的响应类型的响应内容,例如使用 Ajax 时,如果通信数据格式选择 json,发送请求时头部 Accept 字段一般 会设置为 application/json,但是如果服务端并不支持 json,那么服务端可以发送一个 406 Not Acceptable,同时 也应该在 Content-Type 字段中指定客户端所请求的资源的格式,这时客户端可以考虑使用另外的格式来接收响应。

不过备注中说 到,如果没有合适的资源来响应客户端的请求,HTTP 1.1 …

阅读全文 »

Learn HTTP 1.1 Status Code Part. 3

Learn 1.1 HTTP Status Code Part.3

by xujiwei(http://www.xujiwei.com/)

前一篇介绍了 3xx 系列状态码,这一篇介绍 4xx 客户端错误系列。

6. 客户端错误 4xx 系列状态码

4xx 系列状态码可以算是对用户来说相当熟悉的一类状态码,这个系列的状态码通常都会带一段描述信息来描述服务端在处理请求时出现了什么状况,用户能直观地看到服务端返回的信息,而不像 3xx 系列,浏览器会自动处理那些个状态码,不需要用户的参与。

但是 4xx 系列状态码之间的区别只是它所代表的意义不同,它们的表现形式是可以随心所欲的,例如一些著名站点的 404 页面都是精心设计过的。

6.1. 400 Bad Request

请求格式错误,这可能存在于客户端构造的 HTTP 头不符合要求等,这时服务端会返回一个 400 Bad Request,而客户端在不修改请求数据的情况,不可以再次发送这个请求。

6.2. 401 Unauthorized

未授权错误,用于 HTTP 认证。如果客户端请求的资源需要认证,那么服务端可以响应一个 401 Unauthorized,同时在头部添加一个 WWW-Authenticate 字段表示认证方式,客户端在收到 401 



阅读全文 »

Learn HTTP 1.1 Status Code Part.2

Learn HTTP 1.1 Status Code Part.2

by xujiwei(http://www.xujiwei.com/)

前一篇介绍了 2xx 系列状态码,这一篇介绍 3xx 重定向系列。

5 重定向 3xx 系列状态码

3xx 系列状态码一般是用来作为重定向的,并且在重定向的过程中,一般不需要用户的参与,也就是说,重定向的过程是由浏览器来控制的。但是如果重定向后的请求的方法不是 GET 或 HEAD 的话,还是需要用户参与的,不过也许仅仅是确认一下是否同意发送数据而已:)

另外,开发者要注意的是,RFC2616 Section 10.3 的备注中提到了在前一版本的 HTTP 协议中建议最大重定向次数为 5 次,也就是说,客户端可能只跟踪 5 次重定向,如果超过 5 次重定向,那么可能客户端就会把第 5 次重定向后得到的结果做为最终结果。这时,客户端得到的可能就是一个错误的结果,这就是开发者不愿看到的,那么在开发时,就应该尽量控制重定向次数在 5 次以内。

5.1  300 Multiple Choices

300 Multiple Choices,字面意思是多重选择,表示请求的这个地址具有多个资源可以响应。客户端在遇到 



阅读全文 »

Learn HTTP 1.1 Status Code Part.1

Learn HTTP Status Code Part.1

by xujiwei(http://www.xujiwei.com/)

1. 前言

HTTP 状态码在 Web 开发中是相当重要的一部分,掌握了 HTTP 的运用,可以在网站速度、性能等等的优化上有迹可循。当前,掌握 HTTP 状态码也可以为进一步加深对 HTTP 协议的理解打下基础。

以前,我所熟知的 HTTP 状态码仅限于 200、404、302 等几个,但是在一次与 smallshell 聊天的过程中,谈到了 HTTP 状态码,让我对剩余许多我并不熟知的 HTTP 状态码起了兴趣。不过在这之后的一段时间里都比较忙,因此这个想写的这个系列就一直拖着,这几天算是稍微清闲下来了,准备好好学习了一下 HTTP 状态码。

嗯,我也是在学习的过程中,所以,如果我写的有什么不对,欢迎指正,留言或 email(vipxjw at 163 dot com) 均可:)

2. 准备

本文基于 RFC2616 第10节 Status Code Definitions 而写,如果对本文有不明白的地方,可以参考完整的 



阅读全文 »

服务端XMLHTTP(ServerXMLHTTP in ASP)进阶应用-User Agent伪装

服务端XMLHTTP(ServerXMLHTTP in ASP)进阶应用-User Agent伪装

这篇开始讲讲ServerXMLHTTP的进阶应用。说是进阶应用,但也就是讲一些在基本应用里没有讲到的属性或者方法之类:)

使用setRequestHeader伪装User-Agent

User-Agent一般是服务端程序用来判断客户端浏览器、操作系统等信息的标志,它的说明可以参考Wiki,譬如在我的电脑 IE7 的UA就是:

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ;

SLCC1; .NET CLR 2.0.50727; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618)

可以看到,这个UA提供了不少信息,IE版本、Windows版本、.NET版本都有。再看看 Firefox 的:

Mozilla/5.0 (Windows; U; Windows NT 6.0; zh-CN; 



阅读全文 »

[JavaScript] 慎用 somefunction.prototype

在写 JavaScript 脚本的时候,为了创建一个类,如果不使用框架,一般情况我们都会使用 prototype 来给要创建的类增加公有方法,例如:

  • // code from xujiwei.cn
  • function Person(name) {
  • this.Name = name;
  • }
  • Person.prototype.SayHello = function() {
  • alert('Hello, ' + this.Name);
  • }
  • Person.prototype.SayBye = function() {
  • alert('Goodbye, ' + this.Name);
  • }

不过,有的时候,为了书写以及维护的方便,我们会把公有方法的声明写到一个对象里,然后赋值给 Person.prototype,例如:

  • // code from xujiwei.cn
  • function Person(name) 


阅读全文 »

服务端XMLHTTP(ServerXMLHTTP in ASP)基本应用(下)

服务端XMLHTTP(ServerXMLHTTP in ASP)基本应用(下)

接着上一篇《服务端XMLHTTP(ServerXMLHTTP in ASP)基本应用(上)》继续讲讲ServerXMLHTTP的基本应用。

3. 请求使用HTTP认证的页面

呃,虽然说目前使用HTTP基本认证的已经少之又少,但是,总该知道ServerXMLHTTP有这么一个功能,可以直接实现HTTP基本认证。

在ServerXMLHTTP对象的open中,我们通常用到的只是它的前3个参数,即method、uri、async,但事实上,它还有另外两个可选参数,即用于HTTP基本认证的username及password。

那么,如果某天,我们要使用ServerXMLHTTP访问某个使用HTTP基本认证的网站,并且我们已经有了认证所需要的用户名及密码,那么可以使用以下密码来访问需要认证的内容:

  • <%@LANGUAGE="JScript" CODEPAGE="65001"%>
  • <%
  • // code from xujiwei
  • // http://www.xujiwei.cn
  • // 访问www.google.cn并不需要HTTP认证,这里只是作为一个演示
  • var url = "http://www.google.cn";
  • var xmlhttp = new ActiveXObject("MSXML2.ServerXMLHTTP.5.0");
  • // 用户名和密码分别为username和password
  • xmlhttp.open("GET", url, false, "username", "password");
  • xmlhttp.send("");
  • Response.BinaryWrite(xmlhttp.responseBody);
  • xmlhttp = null;
  • %>


阅读全文 »

服务端XMLHTTP(ServerXMLHTTP in ASP)基本应用(上)

服务端XMLHTTP(ServerXMLHTTP in ASP)基本应用(上)

在上一篇《服务器XMLHTTP(Server XMLHTTP in ASP)基础》中我介绍了一下ServerXMLHTTP对象的一些基本属性和方法,接下来我讲讲ServerXMLHTTP的基本应用。

在ServerXMLHTTP中,异步请求不再是主要用途,往往是同步的请求用得更多,因为在服务端编程中,程序的执行是需要迅速结束并返回结果的,不像在桌面程序中,有一个消息循环。这样就导致了在服务端编程中,同步编程用得更多。当然,这并不是说异步请求没有用处,在一定的情况下,异步请求会有很大的作用。

1. 简单的使用ServerXMLHTTP请求并显示指定Url

首先来看一下很简单的例子,使用ServerXMLHTTP请求Google的首页并显示出来:

  • <%@LANGUAGE="JScript" CODEPAGE="65001"%>
  • <%
  • // code from xujiwei
  • // http://www.xujiwei.cn
  • var url = "http://www.google.cn";
  • var xmlhttp = new ActiveXObject("MSXML2.ServerXMLHTTP.5.0");
  • xmlhttp.open("GET", url, false);
  • xmlhttp.send("");
  • Response.BinaryWrite(xmlhttp.responseBody);
  • xmlhttp = null;
  • %>

在浏览器查看这个页面,你就可以看到Google的首页了:

图片附件

但是,我们可以看到,这里的Logo图片是没有显示的,因为这个logo在网页源代码里是以相对路径的方式来指定的:

<img src=/intl/zh-CN/images/logo_cn.gif width=286 height=110 



阅读全文 »