
批改狀態(tài):合格
老師批語:完成的不錯... JSON.stringify()有三個參數(shù), 其實后二個, 極少被人提及, 但一旦掌握會很有用的
一、Json相關知識
1、json是借用了JS對象字面量法來表示數(shù)據(jù),是一種輕量級,用于數(shù)據(jù)交換與存儲的格式化的字符串(本質上仍是一個字符串);
2、json數(shù)據(jù)類型:
3、json的兩個方法:
4、JSON與JS對象的區(qū)別:
5、JSON對象:這個對象不是JS預定義的,它是宿主環(huán)境定義的(瀏覽器)JSON.stringify(js);把JS對象序列化成JSON,JS對象序列化之后,會將以下三種成員刪除:
(1)、方法(函數(shù))
(2)、值為undefined的屬性
(3)、繼承的原型對象成員
6、JSON.stringify();有三個參數(shù):第一個是被序列化的JS對象;第二個數(shù)組(限制序列化的屬性成員)或者(回調函數(shù)可以對JSON的結果中的屬性進一步處理,函數(shù)必須有return value;否則為空,不希望那個值出現(xiàn)可以讓某個屬性返回undefined);第三個參數(shù)設置json字符縮進(數(shù)字或者字符)
7、為了規(guī)范/自定義序列化的返回結果,允許在JS對象中創(chuàng)建一個方法:toJSON;toJSON在調用JSON.stringify()時自動調用,像魔術方法一樣;
8、JSON.parse():有連個參數(shù);第一個參數(shù)json字符串,第二個參數(shù)為回調函數(shù)(回調函數(shù)必須加上return value);
二、AJAX基礎知識
1、同步和異步的概念:
同步:發(fā)出請求得到響應放回數(shù)據(jù),才可以發(fā)送另一個
異步:發(fā)出請求,不需要得到響應回復就可以發(fā)出另一個請求,(回調函數(shù));
2、XMLHttpRequest基本流程(兩種形式):
(1)、請求的進本流程(GET)
(2)、請求的基本流程(POST)
readystatechange
setRequestHeader('content-type','applicaton/x-www-form-urlencoded')
表單數(shù)據(jù)形式setRequestHeader('content-type','applicaton/json;charset=utf-8')
json數(shù)據(jù)形式onsubmit="return false"
禁用表單提交事件;一、JSON和js對象之間轉化練習
1、代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script>
var person = {
name: 'peter zhu',
age: 29,
isMarried: true,
course: {
name: 'JavaScript',
grade: 99
},
getName: function () {
return this.name;
},
hoppy: undefined,
// 繼承的方法
toString: function () {
return '繼承屬性';
}
};
console.log(person);
personj=JSON.stringify(person,['name','age'],4);
console.log(personj);
person1=JSON.stringify(person,function(key,value){
if(key==="age"){
return "年齡是個秘密"
}
return value;
},4);
console.log(person1);
var detail={
name:"ldy",
age:10,
course:"php課程",
toJSON:function(){
return this.name+this.age+this.course;
}
};
console.log(detail);
console.log(JSON.stringify(detail));
var jsonStr = '{"name":"peter zhu",\
"age":29,\
"isMarried":true,\
"course":{"name":"JavaScript","grade":99}}';
var job=JSON.parse(jsonStr);
console.log(job);
joba=JSON.parse(jsonStr,function(key,value){
if(key==="isMarried"){
return "這是什么?";
}
return value;
});
console.log(joba);
</script>
</body>
</html>
2、演示結果:
二、請求基本流程(以GET為例):
1、代碼部分:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ajax</title>
</head>
<body>
<script>
var xhr=new XMLHttpRequest;
xhr.onreadystatechange = function () {
if (this.readyState === 4) {
console.log(this.responseText)
document.write(this.responseText)
}
};
xhr.open('GET','../0228/demo3.html',true);
xhr.send(null);
</script>
</body>
</html>
2、運行結果圖:
三、登陸表單驗證實
1、代碼(只有登陸頁代碼):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.error {
color: red;
}
.success {
color: green;
}
</style>
</head>
<body>
<!-- onsubmit="return false" 禁用表單調的默認功能 -->
<form method="POST" onsubmit="return false" name="login">
<fieldset>
<legend>用戶登錄</legend>
<p><label>郵箱: <input type="email" name="email" required></label></p>
<p><label>密碼: <input type="password" name="password" required></label></p>
<p><button name="submit">提交</button><span id="tips"></span></p>
</fieldset>
</form>
<script>
var form=document.forms.namedItem('login');
// console.log(form.submit);
form.submit.addEventListener('click',check,false);
function check(){
var xhr=new XMLHttpRequest;
xhr.addEventListener('readystatechange',response,false);
xhr.open('POST','check.php',true);
xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');
var user='email='+login.email.value+'&password='+login.password.value;
// var data = JSON.stringify(user);
xhr.send(user);
// console.log(user);
}
function response(ev){
if(ev.target.readyState===4){
// console.log(ev.target.responseText);
// console.log(user);
var user = JSON.parse(ev.target.responseText);
var tips = document.querySelector('#tips');
switch (user.status) {
// 驗證失敗
case 0:
tips.classList.add('error');
tips.innerHTML = user.message + ',重新輸入';
login.email.focus();
login.email.addEventListener('input', function () {
tips.innerHTML = null;
}, false);
break;
// 驗證成功
case 1:
tips.classList.add('success');
// 將用戶的登錄信息寫入cookie
document.cookie = 'email=' + login.email.value;
tips.innerHTML = user.message + ',正在跳轉中...';
setTimeout('location.href="admin.php"', 2000);
break;
// 默認
default:
tips.innerHTML = '未定義錯誤';
}
}
}
</script>
</body>
</html>
2、運行效果圖
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號