
批改狀態(tài):合格
老師批語:
<script>
// 1.棧方法
// 棧:后進(jìn)先出
// 隊(duì):先進(jìn)先出
let arr = [];
let res;
// 1. push();pop():在數(shù)組的尾部增刪
res = arr.push(1, 2, 3);
console.log(arr.pop());
console.log(arr.pop());
console.log(arr.pop());
console.log("%c----", "color:red");
// 2. unshift(),shift():在數(shù)組的頭部進(jìn)行增刪
// console.log(arr.unshift(4, 5, 6));
res = arr.unshift(4, 5, 6);
console.log(arr.shift());
console.log(arr.shift());
console.log(arr.shift());
console.log("%c----", "color:red");
// 3. push()+shift():模擬隊(duì)列,尾部進(jìn)入,頭部出去
res = arr.push(1, 2, 3);
console.log(arr.shift());
console.log(arr.shift());
console.log(arr.shift());
console.log("%c----", "color:red");
// 4. pop()+unshift():模擬隊(duì)列,頭部進(jìn)入,尾部出去
res = arr.unshift(1, 2, 3);
console.log(arr.pop());
console.log(arr.pop());
console.log(arr.pop());
console.log("%c----", "color:red");
// 5. join():將數(shù)組轉(zhuǎn)為字符串返回
arr = ["電腦", "手機(jī)", "相機(jī)"];
res = arr.join("---");
console.log(res);
console.log("%c----", "color:red");
// 6. concat()數(shù)組合并
console.log([1, 2, 3].concat([4, 5, 6], [7, 8, 9]));
console.log("%c----", "color:red");
// 7.slice():返回?cái)?shù)組中的部分成員
arr = [1, 2, 3, 4, 5];
// 取最后二個(gè)數(shù)字
console.log(arr.slice(3));
console.log("%c----", "color:red");
// 8. splice (開始索引,刪除數(shù)據(jù),插入數(shù)據(jù)...) :數(shù)組的增刪改
arr = [1, 2, 3, 4, 5, 6];
// 刪除
res = arr.splice(2);
console.log(arr);
// 更新
arr = [1, 2, 3, 4, 5, 6];
res = arr.splice(1, 2, ...[88, 99]);
console.log(arr);
// 新增:將第二個(gè)參數(shù)設(shè)置為0
arr = [1, 2, 3, 4, 5];
res = arr.splice(1, 0, ...[88, 99]);
console.log(arr);
console.log("%c----", "color:red");
// 9. sort()排序:默認(rèn)是字母表順序
arr = ["p", "b", "a"];
console.log(arr);
arr.sort();
console.log(arr);
console.log("%c----", "color:red");
// 10. map遍歷:有返回值
arr = [1, 2, 3, 4, 5, 6];
res = arr.map((item) => item);
console.log(res);
console.log("%c----", "color:red");
// 11. filter() 過濾
arr = [1, 2, 3, 4, 5];
res = arr.filter((item) => !(item % 2));
console.log(res);
console.log("%c----", "color:red");
// 12. redice(callback(prev,curr)):歸并
arr = [1, 2, 3, 4, 5];
res = arr.reduce((prev, curr) => {
return prev + curr;
});
console.log(res);
</script>
JSON.stringify()
:將 js 數(shù)據(jù)序列化為 json 字符串
<script>
// Array,objecy
console.log(JSON.stringify([1, 2, 3]));
console.log(JSON.stringify({ a: 3, b: 2, c: 3 }));
// 函數(shù)
console.log(
JSON.stringify({ a: 1, b: 2, c: 3 }, (k, v) => {
// 將需要過濾掉的數(shù)據(jù)直接返回undefined
if (v < 2) return undefined;
return v;
})
);
// 格式化輸出json字符串
console.log(JSON.stringify({ a: 1, b: 2, c: 3 }, null, "---"));
console.log(obj);
</script>
JSON.parse()
: 解析 json 字符串為 js 對象
<script>
let obj = JSON.parse(`{"a":1,"b":2,"c":3}`);
console.log(obj.a, obj.b, obj.c);
// 第二個(gè)參數(shù)可以對json的數(shù)據(jù)進(jìn)行處理后再返回
obj = JSON.parse(`{"a":1,"b":2,"c":3}`, (k, v) => {
if (k === "") return v;
return v * 2;
});
console.log(obj);
</script>
<button>ajax-get請求</button>
<p></p>
<script>
const btn = document.querySelector("button");
btn.onclick = () => {
const xhr = new XMLHttpRequest();
xhr.responseType = "json";
xhr.open("get", "test1.php?id=2");
xhr.onload = () => {
console.log(xhr.response);
let user = `姓名:${xhr.response.name},郵箱:${xhr.response.email}`;
document.querySelector("p").innerHTML = user;
};
xhr.onerror = () => console.log("error");
xhr.send(null);
};
</script>
ajax-get 請求 PHP 代碼
<?php
// 以二維數(shù)組模擬數(shù)據(jù)表信息
$users = [
['id'=>1, 'name'=>'天蓬','email'=>'tp@php.cn','password' => md5('123456')],
['id'=>2, 'name'=>'滅絕','email'=>'mj@php.cn','password' => md5('abc123')],
['id'=>3, 'name'=>'西門','email'=>'xm@php.cn','password' => md5('abc888')],
];
// 查詢條件
$id = $_GET['id'];
// 在id組成的數(shù)組中查詢是否存在指定的id,并返回對應(yīng)的鍵名
$key = array_search($id,array_column($users,'id'));
// 根據(jù)鍵名返回指定的用戶信息
echo json_encode($users[$key]);
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>ajax-post請求</title>
</head>
<style>
.login {
width: 20em;
border: 1px solid;
padding: 0 1em 1em;
background-color: lightcyan;
margin: 2em auto;
display: grid;
place-items: center;
}
.login form {
display: grid;
grid-template-columns: 3em 1fr;
gap: 1em 0;
}
/* 按鈕與提示信息顯示在第二列 */
.login form button,
.tips {
grid-area: auto / 2;
}
</style>
<body>
<div class="login">
<form action="" method="POST">
<label for="email">郵箱:</label>
<input type="email" name="email" id="email" />
<label for="password">密碼:</label>
<input type="password" name="password" id="password" />
<button>提交</button>
<span class="tips"></span>
</form>
</div>
<script>
const form = document.querySelector(".login form");
const btn = document.querySelector(".login button");
const tips = document.querySelector(".tips");
btn.onclick = (ev) => {
ev.preventDefault();
const xhr = new XMLHttpRequest();
xhr.open("post", "test2.php");
xhr.onload = () => (tips.innerHTML = xhr.response);
xhr.send(new FormData(form));
};
</script>
</body>
</html>
ajax-post 請求 PHP 代碼:
<?php
// print_r($_POST);
// 使用二維數(shù)組模擬用戶數(shù)據(jù)表信息
$users = [
['id'=>1, 'name'=>'天蓬','email'=>'tp@php.cn','password' => md5('123456')],
['id'=>2, 'name'=>'滅絕','email'=>'mj@php.cn','password' => md5('abc123')],
['id'=>3, 'name'=>'西門','email'=>'xm@php.cn','password' => md5('abc888')],
];
// 將通過post獲取的數(shù)據(jù)保存到臨時(shí)變量中
$email = $_POST['email'];
$password = md5($_POST['password']);
// 使用數(shù)組過濾器查詢是否存在指定的用戶并返回結(jié)果
$res = array_filter($users,function($user) use ($email,$password){
return $user['email'] === $email && $user['password'] === $password;
});
// 將結(jié)果做為請求響應(yīng)返回到前端
echo count($res) === 1 ? '驗(yàn)證成功' : '驗(yàn)證失敗';
cors 跨域:不同源的請求,跨協(xié)議|域名|端口的請求,需服務(wù)器端請求的文件開啟跨域許可。
jsonp 跨域:跨域標(biāo)簽實(shí)現(xiàn),link 的 href,img 的 src,script 的 src,a 標(biāo)簽的 href 等來實(shí)現(xiàn)
jsonp 跨域:可以不需要服務(wù)器端請求的文件開啟跨域許可
jsonp 跨域:前端一個(gè)調(diào)用函數(shù),把函數(shù)名告訴服務(wù)器端,服務(wù)器端把 json 格式數(shù)據(jù)填充前端告訴它的函數(shù)名,進(jìn)行動態(tài)輸出
<button>ajax-get-cors</button>
<p></p>
<script>
const btn = document.querySelector("button");
btn.onclick = (ev) => {
const xhr = new XMLHttpRequest();
xhr.open("get", "http://world.io/cors1.php");
xhr.onload = () => (document.querySelector("p").innerHTML = xhr.response);
xhr.send(null);
};
</script>
<?php
// 在服務(wù)器端開啟跨域許可
// header ('Access-Control-Allow-Origin: http://hello.io');
header ('Access-Control-Allow-Origin: *');
// *:任何來源
echo 'CORS:跨域請求成功';
<button>ajax-post-cors</button>
<p class="tips"></p>
<script>
const btn = document.querySelector("button");
const tips = document.querySelector(".tips");
btn.onclick = (ev) => {
const xhr = new XMLHttpRequest();
xhr.open("post", "http://world.io/cors2.php");
xhr.onload = () => (tips.innerHTML = xhr.response);
let formData = new FormData();
formData.append("email", "admin@php.cn");
formData.append("password", "123456");
xhr.send(formData);
};
</script>
<?php
header ('Access-Control-Allow-Origin: *');
// 返回前端post提交的數(shù)據(jù)
print_r($_POST);
<button>jsonpadding-cors</button>
<p></p>
<script>
function getUser(data) {
console.log(data);
let user = data.name + ":" + data.email;
document.querySelector("p").innerHTML = user;
}
const btn = document.querySelector("button");
btn.onclick = () => {
let script = document.createElement("script");
script.src = "http://world.io/cors3.php?callback=getUser";
document.body.insertBefore(script, document.body.firstElementChild);
};
</script>
<?php
// jsonp 不需要授權(quán)給前端
// 只要返回一個(gè)使用json做為參數(shù)的函數(shù)調(diào)用語句就可以了
// 將前端需要的數(shù)據(jù)以json格式放到這個(gè)函數(shù)的參數(shù)中就行了
// 必須要知道前端js要調(diào)用的函數(shù)名稱
$callback = $_GET['callback'];
// 服務(wù)器中需要返回的數(shù)量
$data = '{ "name": "天蓬", "email": "tp@php.cn" }';
$data = '{ "name": "滅絕", "email": "mj@php.cn" }';
// 在后端生成一條js函數(shù)調(diào)用語句:getuser({ name: "天蓬老師", email: "tp@php.cn" });
echo $callback . '(' .$data. ')';
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號