博客列表 >03月02日作业:json和AJAX基本知识

03月02日作业:json和AJAX基本知识

李东亚¹⁸⁰³⁹⁵⁴⁰¹²⁰
李东亚¹⁸⁰³⁹⁵⁴⁰¹²⁰原创
2020年03月06日 10:36:00977浏览

作业一

一、Json相关知识
1、json是借用了JS对象字面量法来表示数据,是一种轻量级,用于数据交换与存储的格式化的字符串(本质上仍是一个字符串);
2、json数据类型:

  • 简单值:100,”hello”,true,null,没有undefined
  • 对象:{……}
  • 数组:[……]
  • 简单值字符串:必须且只能用双引号作为定界符;

3、json的两个方法:

  • 序列化:JS对象序列化为JSON格式的字符串JSON.stringify();
  • 解析:将JSON格式的字符串解析/还原为JS对象JSON.parse();

4、JSON与JS对象的区别:

  • 没有变量声明:JSON中没有变量的概念
  • 没有分号:以为JSON不是语句
  • JSON属性名必须加上双引号:任何时候任何地方都必须加双引号,且必须加双引号

5、JSON对象:这个对象不是JS预定义的,它是宿主环境定义的(浏览器)JSON.stringify(js);把JS对象序列化成JSON,JS对象序列化之后,会将以下三种成员删除:
(1)、方法(函数)
(2)、值为undefined的属性
(3)、继承的原型对象成员
6、JSON.stringify();有三个参数:第一个是被序列化的JS对象;第二个数组(限制序列化的属性成员)或者(回调函数可以对JSON的结果中的属性进一步处理,函数必须有return value;否则为空,不希望那个值出现可以让某个属性返回undefined);第三个参数设置json字符缩进(数字或者字符)
7、为了规范/自定义序列化的返回结果,允许在JS对象中创建一个方法:toJSON;toJSON在调用JSON.stringify()时自动调用,像魔术方法一样;
8、JSON.parse():有连个参数;第一个参数json字符串,第二个参数为回调函数(回调函数必须加上return value);
二、AJAX基础知识
1、同步和异步的概念:
同步:发出请求得到响应放回数据,才可以发送另一个
异步:发出请求,不需要得到响应回复就可以发出另一个请求,(回调函数);
2、XMLHttpRequest基本流程(两种形式):
(1)、请求的进本流程(GET)

  • a.创建请求对象:new XMLHttpRequest;
  • b.监听请求回调:readystatechange
  • c.设置请求参数:open(请求类型,请求url,是否异步)(默认true,异步)
  • d.发送请求:send(null)

(2)、请求的基本流程(POST)

  • a.创建请求对象:new XMLHttpRequest
  • b.监听请求回调:readystatechange
  • c.设置请求头:open(请求类型,请求url,是否异步):默认true,异步
  • d.设置请求头:setRequestHeader()
  • e.准备请求的数据:var data={……}
  • f.发送请求:send(‘user=’+data);可以添加键值对形式返回
    3、监听事件:readystatechange
    4、reponseText:返回ajax请求文本
    5、reponseXML:返回的html/xml;
    6、readyState===4:标识Ajax请求状态(4代表成功)
    7、status:返回数据(200代表OK)
    8、setRequestHeader('content-type','applicaton/x-www-form-urlencoded')表单数据形式
    setRequestHeader('content-type','applicaton/json;charset=utf-8')json数据形式
    9、setTimeout(函数、time) 方法用于在指定的毫秒数后调用函数或计算表达式。
    10、onsubmit="return false"禁用表单提交事件;

作业二

一、JSON和js对象之间转化练习
1、代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. </head>
  7. <body>
  8. <script>
  9. var person = {
  10. name: 'peter zhu',
  11. age: 29,
  12. isMarried: true,
  13. course: {
  14. name: 'JavaScript',
  15. grade: 99
  16. },
  17. getName: function () {
  18. return this.name;
  19. },
  20. hoppy: undefined,
  21. // 继承的方法
  22. toString: function () {
  23. return '继承属性';
  24. }
  25. };
  26. console.log(person);
  27. personj=JSON.stringify(person,['name','age'],4);
  28. console.log(personj);
  29. person1=JSON.stringify(person,function(key,value){
  30. if(key==="age"){
  31. return "年龄是个秘密"
  32. }
  33. return value;
  34. },4);
  35. console.log(person1);
  36. var detail={
  37. name:"ldy",
  38. age:10,
  39. course:"php课程",
  40. toJSON:function(){
  41. return this.name+this.age+this.course;
  42. }
  43. };
  44. console.log(detail);
  45. console.log(JSON.stringify(detail));
  46. var jsonStr = '{"name":"peter zhu",\
  47. "age":29,\
  48. "isMarried":true,\
  49. "course":{"name":"JavaScript","grade":99}}';
  50. var job=JSON.parse(jsonStr);
  51. console.log(job);
  52. joba=JSON.parse(jsonStr,function(key,value){
  53. if(key==="isMarried"){
  54. return "这是什么?";
  55. }
  56. return value;
  57. });
  58. console.log(joba);
  59. </script>
  60. </body>
  61. </html>

2、演示结果:

二、请求基本流程(以GET为例):
1、代码部分:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>ajax</title>
  6. </head>
  7. <body>
  8. <script>
  9. var xhr=new XMLHttpRequest;
  10. xhr.onreadystatechange = function () {
  11. if (this.readyState === 4) {
  12. console.log(this.responseText)
  13. document.write(this.responseText)
  14. }
  15. };
  16. xhr.open('GET','../0228/demo3.html',true);
  17. xhr.send(null);
  18. </script>
  19. </body>
  20. </html>

2、运行结果图:

三、登陆表单验证实
1、代码(只有登陆页代码):

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. <style>
  7. .error {
  8. color: red;
  9. }
  10. .success {
  11. color: green;
  12. }
  13. </style>
  14. </head>
  15. <body>
  16. <!-- onsubmit="return false" 禁用表单调的默认功能 -->
  17. <form method="POST" onsubmit="return false" name="login">
  18. <fieldset>
  19. <legend>用户登录</legend>
  20. <p><label>邮箱: <input type="email" name="email" required></label></p>
  21. <p><label>密码: <input type="password" name="password" required></label></p>
  22. <p><button name="submit">提交</button><span id="tips"></span></p>
  23. </fieldset>
  24. </form>
  25. <script>
  26. var form=document.forms.namedItem('login');
  27. // console.log(form.submit);
  28. form.submit.addEventListener('click',check,false);
  29. function check(){
  30. var xhr=new XMLHttpRequest;
  31. xhr.addEventListener('readystatechange',response,false);
  32. xhr.open('POST','check.php',true);
  33. xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');
  34. var user='email='+login.email.value+'&password='+login.password.value;
  35. // var data = JSON.stringify(user);
  36. xhr.send(user);
  37. // console.log(user);
  38. }
  39. function response(ev){
  40. if(ev.target.readyState===4){
  41. // console.log(ev.target.responseText);
  42. // console.log(user);
  43. var user = JSON.parse(ev.target.responseText);
  44. var tips = document.querySelector('#tips');
  45. switch (user.status) {
  46. // 验证失败
  47. case 0:
  48. tips.classList.add('error');
  49. tips.innerHTML = user.message + ',重新输入';
  50. login.email.focus();
  51. login.email.addEventListener('input', function () {
  52. tips.innerHTML = null;
  53. }, false);
  54. break;
  55. // 验证成功
  56. case 1:
  57. tips.classList.add('success');
  58. // 将用户的登录信息写入cookie
  59. document.cookie = 'email=' + login.email.value;
  60. tips.innerHTML = user.message + ',正在跳转中...';
  61. setTimeout('location.href="admin.php"', 2000);
  62. break;
  63. // 默认
  64. default:
  65. tips.innerHTML = '未定义错误';
  66. }
  67. }
  68. }
  69. </script>
  70. </body>
  71. </html>

2、运行效果图

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议