Blogger Information
Blog 41
fans 0
comment 0
visits 31059
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
Json和Ajax相关概念(文末有数组函数的小彩蛋)
陈强
Original
469 people have browsed it

Json概念

JSON.stringify(data,replacer,space)

JSON.stringify(data,replacer,space):将js数据转为json

  • json的数据类型是特殊格式的字符串
  1. console.log(JSON.stringify(3.14), typeof JSON.stringify(3.14));
  2. //字符串必须加""
  3. console.log(JSON.stringify("hello"), typeof JSON.stringify("hello"));
  4. //布尔值不能加""
  5. console.log(JSON.stringify(true), typeof JSON.stringify(true));

  • 对json格式字符串的特殊操作,主要通过后面二个参数;第二个参数支持数组 和 函数
  1. //数组
  2. console.log(JSON.stringify({ a: 1, b: 2, c: 3 }, ["a", "b"]));
  3. //输出{"a":1,"b":2}
  4. //Json 数组格式
  5. console.log(JSON.stringify({"a":1,"b":2,"c":3}));
  6. //输出{"a":1,"b":2,"c":3}
  7. //函数
  8. console.log(
  9. JSON.stringify({ a: 1, b: 2, c: 3 }, (k, v) => {
  10. // 将需要过滤掉的数据直接返回undefined
  11. if (v < 2) return undefined;
  12. return v;
  13. })
  14. );
  15. //输出{"b":2,"c":3}
  • 第三个参数,用来格式化输出的json字符串
  1. console.log(JSON.stringify({ a: 1, b: 2, c: 3 }, null, "****"));
  2. //输出
  3. {
  4. ****"a": 1,
  5. ****"b": 2,
  6. ****"c": 3
  7. }

JSON.parse(str,reviver),将json转为js对象

  1. let obj = JSON.parse(`{"a":1,"b":2,"c":3}`);
  • 第二个参数可以对json的数据进行处理后再返回
  1. obj = JSON.parse(`{"a":1,"b":2,"c":3}`, (k, v) => {
  2. // json对象是由内向外解析
  3. if (k === "") return v;
  4. return v * 2;
  5. });
  6. console.log(obj);
  7. //输出{"a":2,"b":4,"c":6}

Ajax概念

ajax-get

  1. <button>ajax-get</button>
  2. <p></p>
  3. <script>
  4. const btn = document.querySelector("button");
  5. btn.onclick = () => {
  6. // 1. 创建 xhr 对象:
  7. const xhr = new XMLHttpRequest();
  8. // 2. 配置 xhr 参数:
  9. xhr.open("get", "demo1.php?id=1");
  10. // 设置返回的格式为json
  11. xhr.responseType = "json";
  12. // 3. 处理 xhr 响应:
  13. xhr.onload = () => {
  14. console.log(xhr.response);
  15. let user = `${xhr.response.name} ${xhr.response.email} ${xhr.response.password}`;
  16. document.querySelector("p").innerHTML = user;
  17. };
  18. xhr.send(null);
  19. };
  20. </script>

ajax-post

  1. const form = document.querySelector(".login form");
  2. const btn = document.querySelector(".login button");
  3. const tips = document.querySelector(".tips");
  4. btn.onclick = (ev) => {
  5. // 建立xhr对象
  6. const xhr = new XMLHttpRequest();
  7. // 设置传输格式post
  8. xhr.open("post", "demo2.php");
  9. //处理 xhr 响应
  10. xhr.onload = () => {
  11. tips.innerHTML = xhr.response;
  12. };
  13. //发送xhr数据
  14. xhr.send(new FormData(form));
  15. };

Cors 跨域概念

cors: 跨域资源共享

  • 同源策略: 为请求的安全,浏览器禁止通过脚本发起一个跨域的请求
    • 只允许通过脚本发起基于同源的请求
    • 同源指: 协议相同,域名/主机名相同,端口相同

ajax-get-cors

  1. <button>ajax-get-cors</button>
  2. <p class="tips"></p>
  3. <script>
  4. // cors: 跨域资源共享
  5. const btn = document.querySelector("button");
  6. const tips = document.querySelector(".tips");
  7. const btn = document.querySelector("button");
  8. btn.onclick = ev => {
  9. // 1. 创建 xhr 对象:
  10. const xhr = new XMLHttpRequest();
  11. // 2. 配置 xhr 参数:
  12. xhr.open("get", "http://world.io/cors1.php");
  13. // 3. 处理 xhr 响应:
  14. xhr.onload = () =>
  15. (document.querySelector("p").innerHTML = xhr.response);
  16. // 4. 发送 xhr 请求:
  17. xhr.send(null);
  18. };
  19. </script>

ajax-post-cors

  1. <button>ajax-post-cors</button>
  2. <p class="tips"></p>
  3. <script>
  4. // cors: 跨域资源共享
  5. const btn = document.querySelector("button");
  6. const tips = document.querySelector(".tips");
  7. btn.onclick = ev => {
  8. // 1. 创建 xhr 对象:
  9. const xhr = new XMLHttpRequest();
  10. // 2. 配置 xhr 参数:
  11. xhr.open("post", "http://world.io/cors2.php");
  12. // 3. 处理 xhr 响应:
  13. xhr.onload = () => (tips.innerHTML = xhr.response);
  14. // 4. 发送 xhr 请求:
  15. let formData = new FormData();
  16. formData.append("email", "admin@php.cn");
  17. formData.append("password", "123456");
  18. xhr.send(formData);
  19. };
  20. </script>
  21. //跨域文件头设置 *为全部同意,可以设置单独的域名只允许这个域名
  22. header('Access-Control-Allow-Origin: *');

jsonp-cors

  • jsonp 原理
  1. function getUser(data) {
  2. console.log(data);
  3. let user = data.name + ": " + data.email;
  4. document.querySelector("p").innerHTML = user;
  5. }
  • 举例
  1. const btn = document.querySelector("button");
  2. btn.onclick = () => {
  3. // 1. 动态生成一个允许跨域请求的html元素
  4. let script = document.createElement("script");
  5. // 2. 将跨域请求的url添加到src属性上
  6. script.src = "http://world.io/cors3.php?callback=getUser";
  7. // 3. 将script挂载到页面中
  8. document.body.insertBefore(script, document.body.firstElementChild);
  9. };

数组常用方法

栈和队

栈: 后进先出
队: 先进先出
他们是仅允许在一端进行增删的数组

  • 声明空数组
  1. let arr = [];
  • push(),pop()在数组的尾部进行增删
  1. //输出3,为添加的元素个数
  2. console.log(arr.push(1, 2, 3));
  3. //从尾部开始删除,每次删除一个元素
  4. console.log(arr.pop());

  • unshift(), shift()在数组的头部进行增删
  1. //输出3,为添加的元素个数
  2. console.log(arr.unshift(1, 2, 3));
  3. //从头部开始删除,每次删除一个元素
  4. console.log(arr.shift());

  • push()+shift(): 模拟队列, 尾部进入,头部出去
  1. console.log(arr.push(4, 5, 6));
  2. console.log(arr.shift());
  3. console.log(arr.shift());
  4. console.log(arr.shift());

  • pop()+unshift(): 模拟队列, 头部进入,尾部出去
  1. console.log(arr.unshift(4, 5, 6));
  2. console.log(arr.pop());
  3. console.log(arr.pop());
  4. console.log(arr.pop());
  • join(): 与字符串的split()相反,将数组转为字符串返回
  1. arr = ["iphone", "vivo", "huawei"];
  2. let res = arr.join("--");
  3. console.log(res);
  4. //输出 iphone--vivo--huawei
  5. //可以把字符串用数组方式输出
  6. let str = "china";
  7. console.log(str[0], str[1], str[2]);
  8. //输出 c h i
  • concat()数组合并
  1. console.log("hello".concat(" word"));
  2. //输出 hello word
  3. console.log([1, 2, 3].concat("hello").concat({ x: 1, y: 2 }));
  4. //输出[1, 2, 3, "hello", {…}]
  5. //不论内容是什么,都会被合并成数组
  • slice(): 返回数组中的部分成员
  1. arr = [1, 2, 3, 4, 5];
  2. console.log(arr.slice(0, 3));
  3. //输出[1,2,3]:从索引0位置开始,取3个元素
  4. console.log(arr.slice(-4));
  5. //输出[2,3,4,5]:从结尾位置开始,取4个元素
  • splice(开始索引,删除的数量,插入的数据…): 数组的增删改,它的本职工作是删除元素
  1. arr = [1, 2, 3, 4, 5];
  2. console.log(arr.splice(2));
  3. //输出[3,4,5]:从索引2的位置开始,后边的都删除
  4. console.log([1, 2, 9, 8, 7]);
  5. //输出[3,4,5]:从索引2的位置开始,后边的都删除
  6. res = arr.splice(2, 2, ...[8, 99]);
  7. console.log(arr);
  8. //输出[1, 2, 8, 99, 5]:第一个2表示从索引2位置开始,第二个2表示替换几个元素
  9. res = arr.splice(1, 0, ...[88, 99]);
  10. //第二个数字为0表示不替换,只新增
  • 排序 sort()
  1. arr = ["a", "z", "o", "p", "w"];
  2. res = arr.sort();
  3. console.log(res);
  4. //输出["a", "o", "p", "w", "z"]:字母按照顺序排列
  5. arr = [1, 99, 89, 7, 64, 57];
  6. res = arr.sort();
  7. console.log(res);
  8. //输出[1, 57, 64, 7, 89, 99] :数字排序只针对第一个数字
  9. //解决办法 [1, 7, 57, 64, 89, 99]
  10. arr.sort((a, b) => a - b);
  • forEach 遍历
  1. arr = [1, 2, 3, 4, 5];
  2. arr.forEach(item => console.log(item));
  3. //map方法
  4. res = arr.map((item) => item * 2);
  5. console.log(res);
  6. //输出[2,4,6,8,10]
  • filter过滤
  1. //过滤掉偶数
  2. arr = [1, 2, 3, 4, 5];
  3. res = arr.filter((item) => item % 2);
  4. console.log(res);
  5. //过滤掉奇数
  6. arr = [1, 2, 3, 4, 5];
  7. res = arr.filter((item) => !(item % 2);
  8. console.log(res);
  • reduce归纳
  1. arr = [1, 2, 3, 4, 5];
  2. res = arr.reduce((prev, curr) => prev + curr);
  3. console.log(res);
  4. //输出15:1+2+3+4+5
  5. res = arr.reduce((prev, curr) => prev + curr,1000);
  6. //输出1015,第二个值为默认开始值
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:希望你能坚持到最后
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post