js小知识

来源:互联网 发布:手机怎么备份所有数据 编辑:程序博客网 时间:2024/06/05 05:44

readyState 属性表示Ajax请求的当前状态。它的值用数字代表。
0 代表未初始化。 还没有调用 open 方法
1 代表正在加载。 open 方法已被调用,但 send 方法还没有被调用
2 代表已加载完毕。send 已被调用。请求已经开始
3 代表交互中。服务器正在发送响应
4 代表完成。响应发送完毕

常用状态码(status)及其含义:

404 没找到页面(not found)
403 禁止访问(forbidden)
500 内部服务器出错(internal service error)
200 一切正常(ok)
304 没有被修改(not modified)(服务器返回304状态,表示源文件没有被修改 )


Post和Get 方法有如下区别
1.Post传输数据时,不需要在URL中显示出来,而Get方法要在URL中显示。 
2.Post传输的数据量大,可以达到2M,而Get方法由于受到URL长度的限制,只能传递大约1024字节. 
3.Post顾名思义,就是为了将数据传送到服务器段,Get就是为了从服务器段取得数据.而Get之所以也能传送数据,只是用来设计告诉服务器,你到底需要什么样的数据.Post的信息作为http请求的内容,而Get是在Http头部传输的。 
get 方法用Request.QueryString["strName"]接收 
post 方法用Request.Form["strName"] 接收 
注意: 
虽然两种提交方式可以统一用Request("strName")来获取提交数据,但是这样对程序效率有影响,不推荐使用。 
一般来说,尽量避免使用Get方式提交表单,因为有可能会导致安全问题 

AJAX乱码问题 
产生乱码的原因: 
1、xtmlhttp 返回的数据默认的字符编码是utf-8,如果客户端页面是gb2312或者其它编码数据就会产生乱码 
2、post方法提交数据默认的字符编码是utf-8,如果服务器端是gb2312或其他编码数据就会产生乱码 

解决办法有: 
1、若客户端是gb2312编码,则在服务器指定输出流编码 
2、服务器端和客户端都使用utf-8编码 
gb2312:header('Content-Type:text/html;charset=GB2312'); 
utf8:header('Content-Type:text/html;charset=utf-8'); 
注意:如果你已经按上面的方法做了,还是返回乱码的话,检查你的方式是否为get,对于get请求(或凡涉及到url传递参数的),被传递的参数都要先经encodeURIComponent方法处理.如果没有用encodeURIComponent处理的话,也会产生乱码. 


对象转换字符串:

利用原生JSON对象,将对象转为字符串

[javascript] view plain copy
var jsObj = {};
jsObj.testArray = [1,2,3,4,5];
jsObj.name = 'CSS3';
jsObj.date = '8 May, 2011';
var str = JSON.stringify(jsObj);
alert(str);

概述:指服务器和客户端间进行通信时的约束和规范,客户端与服务端的数据交互并不是杂乱无章的,需要遵照(基于)一定的规范进行

常见的协议:

?
1
2
3
4
5
a) HTTP、HTTPS 超文本传输协议
 
b) FTP 文件传输协议
 
c) SMTP 简单邮件传输协议

本文主要介绍http超文本传输协议。

1、HTTP协议

即超文本传输协议,网站是基于HTTP协议的,例如网站的图片、CSS、JS等都是基于HTTP协议进行传输的。HTTP协议是由从客户机到服务器的请求(Request)和从服务器到客户机的响应(Response)进行了约束和规范

常用的请求方式有:GET, POST, PUT, DELETE

2、请求-请求报文:

a)    请求由客户端发起,其规范格式为:请求行、请求头、请求主体。如:

b)     请求报文行: 由请求方式、请求URL和协议版本构成

c)     请求报文头

?
1
2
3
4
5
6
Host:localhost请求的主机
Cache-Control:max-age=0控制缓存(no-cache| no-store)
Accept:*/* 接受的文档MIME类型
User-Agent:向访问网站提供你所使用的浏览器类型、操作系统及版本、CPU 类型、浏览器渲染引擎、浏览器语言、浏览器插件等信息的标识. 浏览器UA 字串的标准格式为: 浏览器标识 (操作系统标识; 加密等级标识; 浏览器语言) 渲染引擎标识 版本信息
Referer:从哪个URL跳转过来的
Accept-Encoding:可接受的压缩格式

d)     请求报文体:即传递给服务端的数据

注:当以post形式提交表单的时候,请求头里会设置Content-Type: application/x-www-form-urlencoded,而当以get形式请求时不需要这种设置

3、响应-响应报文 :

a) 响应由服务器发出,其规范格式为:状态行、响应头、响应主体

b) 响应头:

?
1
2
3
4
Date:响应时间
Server:服务器信息
Content-Length:响应主体长度
Content-Type:响应资源的MIME类型

c) 响应主体:即服务端返回给客户端的内容

d) 状态码:

常见的状态码有:200---服务器成功返回网页、304---文档未修改、403---没有权限、404---请求网页不存在、500---服务器错误、503---服务不可用
说明:客户端与服务器在进行数据传输的时候都是以字节形式进行的,可以理解成是以文本形式传输,这时浏览器就需要明确知道该怎么样来解析这些文本形式的数据,MIME就是明确告知浏览器该如何来处理


1、在JavaScript中,arguments对象是比较特别的一个对象,实际上是当前函数的一个内置属性。arguments非常类似Array,但实际上又不是一个Array实例。可以通过如下代码得以证实(当然,实际上,在函数funcArg中,调用arguments是不必要写成funcArg.arguments,直接写arguments即可)。

复制代码
复制代码
1 Array.prototype.testArg = "test";2 function funcArg() {3     alert(funcArg.arguments.testArg);  4     alert(funcArg.arguments[0]);5 }6 7 alert(new Array().testArg); // result: "test"8 funcArg(10);                // result: "undefined"  "10"
复制代码
复制代码

2、arguments对象的长度是由实参个数而不是形参个数决定的。形参是函数内部重新开辟内存空间存储的变量,但是其与arguments对象内存空间并不重叠。对于arguments和值都存在的情况下,两者值是同步的,但是针对其中一个无值的情况下,对于此无值的情形值不会得以同步。如下代码可以得以验证。

复制代码
复制代码
 1 function f(a, b, c){ 2     alert(arguments.length);   // result: "2" 3     a = 100; 4     alert(arguments[0]);       // result: "100" 5     arguments[0] = "qqyumidi"; 6     alert(a);                  // result: "qqyumidi" 7     alert(c);                  // result: "undefined" 8     c = 2012; 9     alert(arguments[2]);       // result: "undefined"10 }11 12 f(1, 2);
复制代码
复制代码

3、由JavaScript中函数的声明和调用特性,可以看出JavaScript中函数是不能重载的。

根据其他语言中重载的依据:"函数返回值不同或形参个数不同",我们可以得出上述结论:

第一:Javascript函数的声明是没有返回值类型这一说法的;

第二:JavaScript中形参的个数严格意义上来讲只是为了方便在函数中的变量操作,实际上实参已经存储在arguments对象中了。

另外,从JavaScript函数本身深入理解为什么JavaScript中函数是不能重载的:在JavaScript中,函数其实也是对象,函数名是关于函数的引用,或者说函数名本身就是变量。对于如下所示的函数声明与函数表达式,其实含以上是一样的(在不考虑函数声明与函数表达式区别的前提下),非常有利于我们理解JavaScript中函数是不能重载的这一特性。

复制代码
复制代码
 1 function f(a){ 2     return a + 10; 3 } 4  5 function f(a){ 6     return a - 10; 7 } 8  9 // 在不考虑函数声明与函数表达式区别的前提下,其等价于如下10 11 var f = function(a){12     return a + 10;13 }14 15 var f = function(a){16     return a - 10;17 }
复制代码
复制代码

4、arguments对象中有一个非常有用的属性:callee。arguments.callee返回此arguments对象所在的当前函数引用。在使用函数递归调用时推荐使用arguments.callee代替函数名本身。

如下:

复制代码
1 function count(a){2     if(a==1){3         return 1;4     } 5     return a + arguments.callee(--a);6 }7 8 var mm = count(10);9 alert(mm);


原创粉丝点击