xml
老试格式、被取代了。
<person>
<name>tom</name>
<age>12</age>
</person>
在因特网上,JSON正逐渐代替XML成为首选的数据交换格式,这是因为JSON容易阅读并且它的结构匹配常见的编程概念,诸如对象和数组。JSON也比XML更高效(即更快的解析和网络传输),这是因为JSON更紧凑——没有开始和结束标签。
json
json指的是类似于javascript对象的一种数据格式
应用:JSON相关的API和工具十分丰富,这让你很容易的将JSON运用在你喜爱的编程语言,IDE 和运行环境里。此外,流行的NoSQL数据库,诸如MongoDB和ConchBase,都是基于JSON的。
JSON是一种简单的数据格式,它有三种基本的数据结构:
键/值对。
对象。{}
数组。[]
可相互嵌套 符合需求
格式
{
"name":"Tom",
"age":18
}
注意:键一定要引起来
JSON 语法
JSON 语法规则
JSON 语法是 JavaScript 对象表示法语法的子集。
- 数据在名称/值对中
- 数据由逗号分隔
- 花括号保存对象
- 方括号保存数组
JSON 名称/值对
JSON 数据的书写格式是:名称/值对。
名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:
“firstName” : “John”
这很容易理解,等价于这条 JavaScript 语句:
firstName = “John”
JSON 值
JSON 值可以是:
- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true 或 false)
- 数组(在方括号中)
- 对象(在花括号中)
- null
JSON 对象
JSON 对象在花括号中书写:
对象可以包含多个名称/值对:
{ "firstName":"John" , "lastName":"Doe" }
这一点也容易理解,与这条 JavaScript 语句等价:
firstName = “John”
lastName = “Doe”
JSON 数组
JSON 数组在方括号中书写:
数组可包含多个对象:
"employees": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]
}
在上面的例子中,对象 “employees” 是包含三个对象的数组。每个对象代表一条关于某人(有姓和名)的记录。
JSON 使用 JavaScript 语法
因为 JSON 使用 JavaScript 语法,所以无需额外的软件就能处理 JavaScript 中的 JSON。
通过 JavaScript,您可以创建一个对象数组,并像这样进行赋值:
例子
var employees = [
{ "firstName":"Bill" , "lastName":"Gates" },
{ "firstName":"George" , "lastName":"Bush" },
{ "firstName":"Thomas" , "lastName": "Carter" }
];
可以像这样访问 JavaScript 对象数组中的第一项:
employees[0].lastName;
返回的内容是:Gates
可以像这样修改数据:
employees[0].lastName = "Jobs";
JSON 文件
- JSON 文件的文件类型是 “.json”
- JSON 文本的 MIME 类型是 “application/json”
JSON 使用
把 JSON 文本转换为 JavaScript 对象
JSON 最常见的用法之一,是从 web 服务器上读取 JSON 数据(作为文件或作为 HttpRequest),将 JSON 数据转换为 JavaScript 对象,然后在网页中使用该数据。
为了更简单地为您讲解,我们使用字符串作为输入进行演示(而不是文件)。
JSON 实例 - 来自字符串的对象
创建包含 JSON 语法的 JavaScript 字符串:
var txt = '{ "employees" : [' +
'{ "firstName":"Bill" , "lastName":"Gates" },' +
'{ "firstName":"George" , "lastName":"Bush" },' +
'{ "firstName":"Thomas" , "lastName":"Carter" } ]}';
由于 JSON 语法是 JavaScript 语法的子集,JavaScript 函数 eval() 可用于将 JSON 文本转换为 JavaScript 对象。
eval() 函数使用的是 JavaScript 编译器,可解析 JSON 文本,然后生成 JavaScript 对象。必须把文本包围在括号中,这样才能避免语法错误:
var obj = eval ("(" + txt + ")");
在网页中使用 JavaScript 对象:
例子
<p>
First Name: <span id="fname"></span><br />
Last Name: <span id="lname"></span><br />
</p>
<script type="text/javascript">
document.getElementById("fname").innerHTML = obj.employees[1].firstName
document.getElementById("lname").innerHTML = obj.employees[1].lastName
</script>
{
"name":"Tom",
"age":18
”info“:[
“male”:“gcs”
{
“work”:["html","css"]
}
]
}
注释
JSON不允许有注释。注释原本是JSON的一部分,但是开发者将解析指令放入注释中,这极大地滥用了它们。当道格拉斯•克罗克福德看见开发者如此实践时,他从JSON里移除了注释,以此保持计算机平台的互操作性。
ajax
发送http请求
ajax技术的目的是让javascript发送http请求,与后台通信,获取数据和信息。
1.获取
2.当前界面
只更新获取数据,别的不动。
和后台通信
3/默认不能跨遇请求。但是也能设置。
百度不能请求腾讯
$.ajax使用方法
常用参数:
1、url 请求地址
2、type 请求方式,默认是'GET',常用的还有'POST'
3、dataType 设置返回的数据格式,常用的是'json'格式,也可以设置为'html'
4、data 设置发送给服务器的数据
5、success 设置请求成功后的回调函数
6、error 设置请求失败后的回调函数
7、async 设置是否异步,默认值是'true',表示异步
部分参数含义:
404 服务器资源没找到
200请求成功
500 服务器挂了
适配
第一个
jsonp
ajax只能请求同一个域下的数据或资源,有时候需要跨域请求数据,就需要用到jsonp技术,jsonp可以跨域请求数据,它的原理主要是利用了script标签可以跨域链接资源的特性。
跨域请求
src标签
jsonpCallback 回调
跟调用地方一致
data:{}
传参数
请求对了200
数据密码写错了。
msg就会起到作用。msg:200.
跨域不需要服务器环境
empty清空列表
正则表达式
常用字符
/^ $\开头结尾
4 14 5 15
对象
RegExp
i忽略大小写
g全文搜索
/a/ig;
正则匹配字符串
数字字符串 true
/d 就看有没有数字
test
123ab1 也是false
/^ $\开头结尾
'+' 出现一次或多次(至少出现一次)
/^ \w+ $/
3、规则中的字符
1)普通字符匹配:
如:/a/ 匹配字符 ‘a’,/a,b/ 匹配字符 ‘a,b’
2)转义字符匹配:
\d 匹配一个数字,即0-9
\D 匹配一个非数字,即除了0-9
\w 匹配一个单词字符(字母、数字、下划线)
\W 匹配任何非单词字符。等价于[^A-Za-z0-9_]
\s 匹配一个空白符
\S 匹配一个非空白符
\b 匹配单词边界
\B 匹配非单词边界
. 匹配一个任意字符,除了换行符‘\n’和回车符‘\r’
\1 重复子项
4、量词:对左边的匹配字符定义个数
? 出现零次或一次(最多出现一次)
- 出现一次或多次(至少出现一次)
- 出现零次或多次(任意次)
{n} 出现n次
{n,m} 出现n到m次
{n,} 至少出现n次
5、任意一个或者范围
[abc123] : 匹配‘abc123’中的任意一个字符
[a-z0-9] : 匹配a到z或者0到9中的任意一个字符
6、限制开头结尾
^ 以紧挨的元素开头
$ 以紧挨的元素结尾
7、修饰参数:
g: global,全文搜索,默认搜索到第一个结果接停止
i: ingore case,忽略大小写,默认大小写敏感
m: multiple lines,多行搜索(更改^ 和$的含义,使它们分别在任意一行对待行首和行尾匹配,而不仅仅在整个字符串的开头和结尾匹配)
8、常用函数
1、test
用法:正则.test(字符串) 匹配成功,就返回真,否则就返回假
2、search
用法:字符串.search(正则) 匹配成功,返回位置,否则返回-1
3、match
用法: 字符串.match(正则);匹配成功,就返回匹配成功的数组,否则就返回null
4、replace
用法:字符串.replace(正则,新的字符串) 匹配成功的字符去替换新的字符
正则默认规则
匹配成功就结束,不会继续匹配,区分大小写
正则表达式demo
javascript正则表达式检验
/*********************************************************************************
* EO_JSLib.js
* javascript正则表达式检验
**********************************************************************************/
//校验是否全由数字组成
function isDigit(s)
{
var patrn=/^[0-9]{1,20}$/;
if (!patrn.exec(s)) return false
return true
}
//校验登录名:只能输入5-20个以字母开头、可带数字、“_”、“.”的字串
function isRegisterUserName(s)
{
var patrn=/^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,19}$/;
if (!patrn.exec(s)) return false
return true
}
//校验用户姓名:只能输入1-30个以字母开头的字串
function isTrueName(s)
{
var patrn=/^[a-zA-Z]{1,30}$/;
if (!patrn.exec(s)) return false
return true
}
//校验密码:只能输入6-20个字母、数字、下划线
function isPasswd(s)
{
var patrn=/^(/w){6,20}$/;
if (!patrn.exec(s)) return false
return true
}
//校验普通电话、传真号码:可以“+”开头,除数字外,可含有“-”
function isTel(s)
{
//var patrn=/^[+]{0,1}(/d){1,3}[ ]?([-]?(/d){1,12})+$/;
var patrn=/^[+]{0,1}(/d){1,3}[ ]?([-]?((/d)|[ ]){1,12})+$/;
if (!patrn.exec(s)) return false
return true
}
//校验手机号码:必须以数字开头,除数字外,可含有“-”
function isMobil(s)
{
var patrn=/^[+]{0,1}(/d){1,3}[ ]?([-]?((/d)|[ ]){1,12})+$/;
if (!patrn.exec(s)) return false
return true
}
//校验邮政编码
function isPostalCode(s)
{
//var patrn=/^[a-zA-Z0-9]{3,12}$/;
var patrn=/^[a-zA-Z0-9 ]{3,12}$/;
if (!patrn.exec(s)) return false
return true
}
//校验搜索关键字
function isSearch(s)
{
var patrn=/^[^`~!@#$%^&*()+=|///][/]/{/}:;'/,.<>/?]{1}[^`~!@$%^&()+=|///][/]/{/}:;'/,.<>?]{0,19}$/;
if (!patrn.exec(s)) return false
return true
}
function isIP(s) //by zergling
{
var patrn=/^[0-9.]{1,20}$/;
if (!patrn.exec(s)) return false
return true
}
ajax demo
<script type="text/javascript">
$.ajax({
url: 'js/data.json',
// url: 'http://localhost:8888/buickmall/js/data.json',
type: 'get',
dataType: 'json'
})
.done(function(data) {
if(data.code == 200){
$('#logout1 em').html(data.data.name);
$('#login1,.cc1').addClass('hidden');
$('#logout1,.cc').addClass('show');
// $('#login').addClass('show');
// $('#logout').addClass('hidden');
}else if(data.code == 404){
alert('对不起,页面不小心走丢了!')
}else if(data.code == 500){
alert('对不起,服务器挂了!')
}
})
.fail(function(jqXHR, textStatus, errorThrown) {
alert('连接超时!请重试');
console.log("error");
/*打印jqXHR对象的信息*/
console.log(jqXHR.responseText); //必要的时候编码一下:encodeURIComponent(jqXHR.responseText);
console.log(jqXHR.status);
console.log(jqXHR.readyState);
console.log(jqXHR.statusText);
/*打印其他两个参数的信息*/
console.log(textStatus);
console.log(errorThrown);
});
</script>
</head>
<body>
<!-- 侧栏 -->
<ul id="hp_nav_float" class="nav_float" >
<!-- <li id="nav_live800" class="zx" ></li> -->
<li>
<a class="ps" href="#">配饰</a>
</li>
<li>
<a class="ss" href="#">首饰</a>
</li>
<li>
<a class="jp" href="#">家品</a>
</li>
<li>
<a class="wjbg" href="#">文具办公</a>
</li>
<li>
<a class="dzzb" href="#">电子周边</a>
</li>
<li>
<a class="tp" href="#">回到顶部</a>
</li>
</ul>
<!-- 头部div -->
<div id="header_module">
<!-- top -->
<div class="header_top">
<div class="header_top_left">
<h3 class="attention_h3">
<!-- 微博加关注 -->
<iframe name="ifr_weibo" id="ifr_weibo" width="136" height="26" frameborder="0" src="http://widget.weibo.com/relationship/followbutton.php?width=126&height=26&uid=1649595527&style=2&btn=light&dpc=1"></iframe>
</div>
<div class="header_top_right">
<!-- loin -->
<!-- class="memberwwelcom" -->
<div id="logout1" class="user_message cc" >
<a class="b" rel='nofollow' href="web2dl.html" target="_blank" class="reg">>
退出
</a>
<!-- <span class="c" style="display:inline;">或</span> -->
<a class="d" rel='nofollow' href="file:///D:/sumblm/projectcc/web2dl.html" >
欢迎你 <em></em>
</a>
<span class="a">欢迎来到杂良集! </span>
</div>
<div id="login1" class="user_message cc1" >
<a class="b" rel='nofollow' href="file:///D:/sumblm/projectcc/web2zuce.html" target="_blank" class="reg">
注册
</a>
<span class="c" style="display:inline;">或</span>
<a class="d" rel='nofollow' href="file:///D:/sumblm/projectcc/web2dl.html" >
登录
</a>
<span class="a">欢迎来到杂良集! 请 </span>
</div>
网友评论