JavaScript高级程序设计(第三版)学习笔记20、21、23章
第20章,JSON
对象
{
"name":"Nicholas",
"age":20
}
{
"name":"Nicholas",
"age":19,
"school":{
"name":"school",
"location":"location"
}
}
数组
[
{
"title":"array",
"author":"author"
},
[
"title":"book",
"author":{
"nameOne",
"nameTwo"
}
]
]
JSON对象
var book = {
title:"title",
author:[
"Nicholas C. Zakas"
],
edition:3,
year:2011
};
var jsonText = JSON.stringify(book);
alert(jsonText); //{"title":"title","author":["Nicholas C. Zakas"],"edition":3,"year":2011}
序列化选项
1、过滤结果
var book = {
title:"title",
author:[
"Nicholas C. Zakas"
],
edition:3,
year:2011
};
var jsonText = JSON.stringify(book,["title","edition"]); //{"title":"title","edition":3}
如果是函数,则又有不同
var jsonText = JSON.stringify(book,function(key,value){
switch(key){
case "author":
return value.join(","); case "year":
return 5000; case "edition":
return undefined;
default:
return value;
}
}); //{"title":"title","author":"Nicholas C. Zakas","year":5000}
2、字符串缩进
var jsonText = JSON.stringify(book,null,4);
//结果:
{
"title": "title",
"author": [
"Nicholas C. Zakas"
],
"edition": 3,
"year": 2011
}
{
- -"title": "title",
- -"author": [
- - - -"Nicholas C. Zakas"
- -],
- -"edition": 3,
- -"year": 2011
}
3、toJSON方法
解析选项
var book = {
title:"title",
author:[
"Nicholas C. Zakas"
],
edition:3,
year:2011,
releaseDate:new Date(2011,11,1)
}; var jsonText = JSON.stringify(book);
var bookCopy = JSON.parse(jsonText,function(key,value){
if(key == "releaseDate"){
return new Date(value);
}else{
return value;
}
}); alert(bookCopy.releaseDate.getFullYear()); //
第21章,Ajax和Comet
XMLHttpRequest
function createXHR(){
if(typeof XMLHttpRequest != "undefined"){
return new XMLHttpRequest;
}else if(typeof ActiveXObject != "undefined"){
if(typeof arguments.callee.activeXString != "string"){
var versions = ["MSXML2.XMLHttp.6.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp"],i,len;
for(i=0,len=versions.length;i < len;i++){
try{
new ActiveXObject(versions[i]);
arguments.callee.activeXString = versions[i];
break;
}catch(ex){
//跳过
}
}
}
return new ActiveXObject(arguments.callee.activeXString);
}else{
throw new Error("No XHR Object available");
}
}
//使用示例
var xhr = createXHR();
XHR用法
xhr.open("get","example.php",false);
xhr.send(null);
xhr.open("get","example.php",false); //同步请求
xhr.send(null); if((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){
alert(xhr.resopnseText);
}else{
alert("Request was unsuccessful: "+xhr.status);
}
var xhr = createXHR();
xhr.onreadystatechange = function(){ //DOM0级方法,不是所有浏览器都支持DOM2级方法
if(xhr.readyState == 4){
if((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){
alert(xhr.resopnseText);
}else{
alert("Request was unsuccessful: "+xhr.status);
}
}
};
xhr.open("get","example.php",true); //异步请求
xhr.send(null);
在接收到响应之前还可以调用abort方法来取消异步请求:
xhr.abort();
HTTP头部信息
Accept:浏览器能够处理的内容类型
var xhr = createXHR();
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){
if((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){
alert(xhr.resopnseText);
}else{
alert("Request was unsuccessful: "+xhr.status);
}
}
};
xhr.open("get","example.php",true);
xhr.setRequestHeader("MyHeader","MyValue");
xhr.send(null);
GET请求
POST请求
function submitData(){
var xhr = createXHR();
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){
if((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){
alert(xhr.resopnseText);
}else{
alert("Request was unsuccessful: "+xhr.status);
}
}
}; xhr.open("post","postExample.php",true);
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
var form = document.getElementById("user-info");
xhr.send(serialize(form));
}
示例php文件:
<?php
header("Content-Type:text/plain");
echo <<<EOF
Name:{$_POST['user-name']}
Email:{$_POST['user-email']}
EOF;
?>
var data = new FormData();
data.append("name","Nicholas"); //接收两个参数:键,值
方法2、
var data = new FormData(document.forms[0]); //直接使用表单元素
方法3、
var form = document.getElementById("user-info");
xhr.send(new FormData(form));
超时设定
overrideMimeType方法
进度事件
跨源资源共享
IE对CORS的支持
其他浏览器对CORS的支持
其他跨域技术
图像ping
JSONP
Comet
服务器发送事件
Web Socket
1、Web Socket API
var socket = new WebSocket("ws://www.example.com/server.php");
socket.close();
2、发送和接收数据
socket.send("hello world"); //任意字符串
3、其他事件
第23章,离线应用与客户端存储
离线检测
应用缓存
数据存储
1、限制
2、cookie的构成
3、js中的cookie
var socket = new WebSocket("ws://www.example.com/server.php");
var CookieUtil = {
get:function(name){
var cookieName = encodeURIComponent(name) + "=" ,
cookieStart = document.cookie.indexOf(cookieName),
cookieValue = null; if(cookieStart > -1){
var cookieEnd = document.cookie.indexOf(";",cookieStart);
if(cookieEnd == -1){
cookieEnd = document.cookie.length;
}
cookieValue = decodeURIComponent(document.cookie.substring(cookieStart+cookieName.length,cookieEnd));
} return cookieValue;
},
set:function(name,value,expires,path,domain,secure){
var cookieText = encodeURIComponent(name) + "=" + encodeURIComponent(value); if(expires instanceof Date){
cookieText += "; expires=" + expires.toGMTString();
}
if(path){
cookieText += "; path=" + path;
}
if(domain){
cookieText =+ "; domain=" + domain;
}
if(secure){
cookieText += "; secure=" + secure;
}
document.cookie = cookieText;
},
unset:function(name,path,domain,secure){
this.set(name,"",new Date(0),path,domain,secure);
}
};
使用示例:
//设置cookie
CookieUtil.set("name","Nicholas");
CookieUtil.set("book","Professional JavaScript"); //读取
alert(CookieUtil.get("name")); //"Nicholas"
alert(CookieUtil.get("book")); //Professional JavaScript //删除
CookieUtil.unset("name");
CookieUtil.unset("book"); //设置cookie,包括它的路径、域、失效日期
CookieUtil.set("name","Nicholas","/books/projs","www.wrox.com",new Date("January 1,2010")); //删除刚设置的cookie
CookieUtil.unset("name","/books/projs","www.wrox.com"); //设置安全cookie
CookieUtil.set("name","Nicholas",null,null,null,true);
4、子cookie
5、关于cookie的思考
Web存储机制
1、Storage类型
2、sessionStorage对象
3、globalStorage对象
4、localStorage对象
5、storage事件
IndexedDB
JavaScript高级程序设计(第三版)学习笔记20、21、23章的更多相关文章
- JavaScript高级程序设计第三版学习笔记(一)之数据类型区分详谈
null.NaN.undefined三者的区别是什么? 在初次接触到JavaScript的时候,傻傻的分不清null.NaN.undefined三者到底区别何在,在实际的项目开发中也因为这个问题而困惑 ...
- JavaScript高级程序设计第三版-读书笔记(1-3章)
这是我第一次用markdown,也是我第一次在网上记录我自己的学习过程. 第一章 JavaScript主要由以下三个不同的部分构成 ECMAScript 提供核心语言功能 DOM 提供访问 ...
- JavaScript高级程序设计第三版.CHM【带实例】
从驱动全球商业.贸易及管理领域不计其数的复杂应用程序的角度来看,说 JavaScript 已经成为当今世界上最流行的编程语言一点儿都不为过. JavaScript 是一种非常松散的面向对象语言,也是 ...
- javascript高级程序设计第三版书摘
在HTML 中使用JavaScript <script>元素 在使用<script>元素嵌入 JavaScript 代码时,只须为<script>指定 type 属 ...
- DOM 操作技术【JavaScript高级程序设计第三版】
很多时候,DOM 操作都比较简明,因此用JavaScript 生成那些通常原本是用HTML 代码生成的内容并不麻烦.不过,也有一些时候,操作DOM 并不像表面上看起来那么简单.由于浏览器中充斥着隐藏的 ...
- Javascript高级程序设计第三版-笔记
1.JS数值最大值最小值: >Number.MIN_VALUE <5e-324 >Number.MAX_VALUE <1.7976931348623157e+308 判断数值是 ...
- 22.1 高级函数【JavaScript高级程序设计第三版】
函数是JavaScript 中最有趣的部分之一.它们本质上是十分简单和过程化的,但也可以是非常复杂和动态的.一些额外的功能可以通过使用闭包来实现.此外,由于所有的函数都是对象,所以使用函数指针非常简单 ...
- 21.1 XMLHttpRequest 对象【JavaScript高级程序设计第三版】
IE5 是第一款引入XHR 对象的浏览器.在IE5 中,XHR 对象是通过MSXML 库中的一个ActiveX对象实现的.因此,在IE 中可能会遇到三种不同版本的XHR 对象,即MSXML2.XMLH ...
- 2.1 <script>元素【JavaScript高级程序设计第三版】
向 HTML 页面中插入 JavaScript 的主要方法,就是使用<script>元素.这个元素由 Netscape 创造并在 Netscape Navigator 2 中首先实现.后来 ...
- 14.5 富文本编辑【JavaScript高级程序设计第三版】
富文本编辑,又称为WYSIWYG(What You See Is What You Get,所见即所得).在网页中编辑富文本内容,是人们对Web 应用程序最大的期待之一.虽然也没有规范,但在IE 最早 ...
随机推荐
- Tomcat普通用户部署教程(生产服务器)
1.环境准备 JDK安装 解压 tar xf tomcat-xx.tar.gz -C /data/soft cd /data/soft 重命名 mv tomcat-xx tom ...
- HW5.27
public class Solution { public static void main(String[] args) { int totalCount = 0; int lineCount = ...
- RecyclerView使用笔记
1.判断是否可以滑动 //是否可以上滑 ViewCompat.canScrollVertically(recyclerView, 1); //是否可以下滑 ViewCompat.canScrollVe ...
- PT100运算放大器电路
运放输出电压<=运放电源电压,电源电压能决定它的最大输出能力即动态范围,若是电源为0-5v,则输出就只能在这之间. 其次要是放大电路,反馈必须接成负反馈 由于我这次使用的电源是5V,要是采用两 ...
- Everything
Everything,windows下做好用的搜索工具,速度特别快!下载地址:http://www.voidtools.com/ 快速下载地址:http://files.cnblogs.com/fil ...
- MyBatis如何防止SQL注入
转自:http://www.myexception.cn/sql/1938757.html SQL注入是一种代码注入技术,用于攻击数据驱动的应用,恶意的SQL语句被插入到执行的实体字段中(例如,为了转 ...
- MVC产生验证码
来源地址: http://www.cnblogs.com/insus/p/3629269.html
- C++学习笔记(五):指针和引用
声明指针: //指针声明 * 号左右的空格是可选的,下面的定义都是正确的 int *pointer1; int* pointer2; int*pointer3; int * pointer4; //注 ...
- linux系统基础(二)
磁盘管理(一) Linux设备认识 /dev/cdrom /dev/sr0 /dev/mouse /dev/sda /dev/hda IDE硬盘(支持4块):hd(a-d) [非IDE硬盘]SCSI硬 ...
- 浅析 ThreadLocal
一.ThreadLocal类说明 ThreadLocal,很容易让人望文生义,直译"本地线程".ThreadLocal不是一个thread,是thread的局部变量.使用Threa ...