JSON
JSON是一种数据交换格式
数据交换格式是一种在不同平台间传递数据的文本格式
JSON 的全称是 JavaScript Object Notation(JavaScript字面量表示法)
JSON的媒体类型是application/json
字面量就是变量字面上的意思,没有任何的隐喻
例如 y=x+5 5就是字面量 而y则不是
在json中实用:来分隔名称和值,名称始终在左侧,值始终在右侧,字符和字符串组成的名称和值都必须被""包含(单引号同样非法),否则将会创建一个JavaScript对象,数字
在json中,任何名称都是合法的,包括在双引号中插入单引号,但并不提倡这么做,因为这样会降低json数据的可移植性,除(a~z,0-9)皆为特殊字符
- { 开始读取对象
- } 结束读取对象
- [ 开始读取数组
- ] 结束读取数组
- : 在名称-值中分隔名称和值
- , 分隔对象中的名称-值对
JSON对象可以嵌套
{
"yo":{
"bala":"ss"
"栓但":{
"铁柱":"树生"
}
}
}
JSON : number
整数,浮点数,负数,指数都被允许
JSON : boolean
true,false
JSON : null
null表示一个没有值的值,undefined则不同(null必须采用小写形式)
JSON : array
数组可以由数字,字符串,布尔值,null,对象构成(在大多数语言里,null不应该存在于数组中)
JSON Schema
指的是数据交换中的一种虚拟的“合同”。
更像是用schema提供的语法规定json内容的具体规范,而服务器负责检查,所定义的json数据是否符合预先设定好的格式
JSON验证器负责验证语法错误,JSON Schema负责提供一致性检验。
JSON Schema是数据接收方额第一道防线,也是数据发送方节约时间、保证数据正确的好工具。
JSON Schema可以解决下列有关一致性验证的问题。
1、 值的数据类型是否正确:可以具体规定一个值是数字、字符串等类型;
2、 是否包含所需的数据:可以规定哪些数据是需要的,哪些是不需要的;
3、 值的形式是不是我需要的:可以指定范围、最小值和最大值。
第一个值是声明,声明的名称必须为"$schema" 值为所用草拟版本的链接
第二个值是json schema的标题
第三个值定义需要包含在JSON中的属性
required规定了哪些值是必须存在的,哪些值是可选的
{
"$schema":"http://json-schema.org/draft-04/schema#",
"title":"yooooo",
"properties":{
"name":{
"type":"string"
},
"age":{
"type":"number",
"description":"your age in years"
},
"declawed":{
"type":"boolean"
}
},
"required":[
"name",
"age"
]
}
还可以规定一些范围属性,例如minLength,maxLength,(规定字符最小最大长度)minimum(规定数字最小值)
JavaScript中的XMLHttpRequest与Web API
JavaScript中的xhr负责在客户端发起请求,web api负责在服务端返回响应
将一个对象转成JSON文本称为序列化(json.stringify)
将JSON文本转换成对象称为反序列化(json.parse)
AJAX
JavaScript在幕后进行的操作,称为异步操作,不会中断主进程的进行,
也称为AJAX
Asynchronous JavaScript and XML(异步JavaScript和XML)
节省用户操作,时间,提高用户体验,减少数据请求
传输获取数据
原生js ajax请求
-
var xhr = new XMLHttpRequest;
-
xhr.open(‘get’&‘post’,‘地址’,‘true’&‘flase’)
-
true 异步 非阻塞模式 一般填true
-
false 同步 阻塞模式
-
get方式用来传递非敏感数据,将表单数据以名称/值对的形式附加到URL中,用&连接名称数值,名称数值间用=连接.当传递中文时,用encodeURL(‘数据’)进行编码传输,get方式会优先读取缓存的地址,所以可以在数据后用&连接一个时间戳解决,new Date().getTime()
-
post方式将表单数据附加到 HTTP 请求的 body 内 ,如果需要用post方式,需要设置请求头,post没有缓存问题,而且中文不需要编码处理,因为请求头中已经设置了编码方式
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded;);
-
-
xhr.send()
- 若发送方式为get,此处置空
- 若发送方式为post,则在send中添加数据
-
判断状态,处理数据
xhr.onreadystatechange = function(){ if(xhr.readyState == 4 && xhr.status == 200){ console.log(xhr.responseText); } } readyState只有5个值,只读 0:XMLHttpRequest对象创建完成。 1:XMLHttpRequest对象初始化完成。 2:请求已经发送。 3:服务器已经返回了数据(但是还没有被解析,可能只一段http报文)。 4:数据解析已经完成 xhr.reponseText 返回的永远是一个字符串类型的值