image.png

image.png
ts是切片,请求视频不是直接请求的,是一片一片的,不是直接发送整个视频,就像看视频有进度条,进度条之上慢慢缓存视频,如果跳着看视频,得网络加载

混编

如果前端、后端代码写在一块,比如php、html、css写一块,后缀名一定是语音相关的后缀名。因为html没有解析js之外语言的能力,没有解析php语言的能力。仍然可以写js的代码。
php是脚本语言,可以写在网页里,与js一块写。asp、jsp、python都可以混编。没有异步时,前后端写一块,不好分离

后端框架mvc

静态 服务端把html代码写好,发给客户端,如果服务端数据发生变化,刷新网页,网页页面也变化,这是动态网站

Ajax

image.png

同步请求

同步:点击跳转,出数据,是同步。
image.png
image.png
为了得到列表数据,得请求整个页面,可能只是变化很少一部分,就要请求整个页面。

这是同步请求

异步请求

不请求整个页面,而是数据,客户端页面里的js还能得到这段数据,并且根据数据绘制页面,在之前页面的基础上。
js可以拿到dom,可以修改dom

ajax

xml因为当时json没有诞生,数据发送是通过xml的

image.png
就像function Function是js引擎内置构造函数一样,XMLHttpRequest也是js引擎内置的构造函数

image.png

image.png

image.png
image.png

代码

  1. //原生get请求
  2. var xhr;
  3. if (window.XMLHttpRequest) {//判断XMLHttpRequest对象是否存在
  4. xhr = new XMLHttpRequest();
  5. } else {
  6. xhr = new ActiveXObject('Microsoft.XMLHTTP');//ie5/ie6兼容
  7. }
  8. console.log(xhr.readyState);
  9. //得到数据,get请求,地址,true异步请求
  10. xhr.open('GET', 'http://localhost/network/class7/server/get_courses.php?status=1', true);
  11. xhr.send();//发送
  12. //响应
  13. xhr.onreadystatechange = function () {
  14. if (xhr.readyState === 4 && xhr.status === 200) {
  15. console.log(JSON.parse(xhr.responseText));//返回JSON数据
  16. }
  17. }
  1. //原生get请求
  2. var xhr;
  3. if (window.XMLHttpRequest) {//判断XMLHttpRequest对象是否存在
  4. xhr = new XMLHttpRequest();
  5. } else {
  6. xhr = new ActiveXObject('Microsoft.XMLHTTP');//ie5/ie6兼容
  7. }
  8. console.log(xhr.readyState);//0
  9. //得到数据,get请求,地址,true异步请求
  10. xhr.open('GET', 'http://localhost/network/class7/server/get_courses.php?status=1', true);
  11. xhr.send();//发送
  12. console.log(xhr.readyState)//1
  13. //响应
  14. xhr.onreadystatechange = function () {
  15. console.log(xhr.readyState)//2 3 4
  16. if (xhr.readyState === 4 && xhr.status === 200) {
  17. console.log(JSON.parse(xhr.responseText));//返回JSON数据
  18. }
  19. }
  1. <script>
  2. //原生get请求
  3. var xhr;
  4. if (window.XMLHttpRequest) {//判断XMLHttpRequest对象是否存在
  5. xhr = new XMLHttpRequest();
  6. } else {
  7. xhr = new ActiveXObject('Microsoft.XMLHTTP');//ie5/ie6兼容
  8. }
  9. console.log(xhr.readyState);//0
  10. //得到数据,get请求,地址,true异步请求
  11. xhr.open('GET', 'http://localhost/network/class7/server/get_courses.php?status=1', true);
  12. //必须写这个才能send发送数据,才能进行下面语句否则报错 告诉后端把send中数据转换成键值对
  13. xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
  14. xhr.send('status=1&flag=1');//发送
  15. // {status:1,flag:1}
  16. console.log(xhr.readyState)//1
  17. //响应
  18. xhr.onreadystatechange = function () {
  19. console.log(xhr.readyState)//2 3 4
  20. if (xhr.readyState === 4 && xhr.status === 200) {
  21. console.log(JSON.parse(xhr.responseText));//返回JSON数据
  22. }
  23. }
  24. </script>

ajax请求

  1. // jquery ajax 请求
  2. $.ajax({
  3. url: 'http://localhost/network/class7/server/get_courses.php',
  4. type: 'POST',
  5. dateType: 'JSON',
  6. data: {
  7. status: 1
  8. },
  9. success: function (data) {
  10. console.log(data);
  11. }
  12. });
  13. $.post('http://localhost/network/class7/server/get_courses.php', { status: 1 }, function (data) {
  14. console.log(data);
  15. })
  16. $.get('http://localhost/network/class7/server/get_courses.php?status=1', function (data) {
  17. console.log(data);
  18. })
  19. //$是一个对象
  1. var $ = {
  2. ajax: function (opt) {
  3. var url = opt.url;
  4. console.log(url);
  5. },
  6. post: function () {
  7. console.log('post');
  8. },
  9. get: function () {
  10. console.log('get');
  11. }
  12. }
  13. $.ajax({
  14. url: 'http://www.baidu.com/'
  15. })
  1. //同时满足 1.function 2.$=object $是对象 3. $.ajax 三个条件
  2. function $() {
  3. return {
  4. ajax: function () {
  5. // var url = opt.url;
  6. // console.log(url);
  7. console.log('ajax');
  8. },
  9. post: function () {
  10. console.log('post');
  11. },
  12. get: function () {
  13. console.log('get');
  14. }
  15. }
  16. }
  17. console.log($().ajax());
  1. var $ = (function () {
  2. return {
  3. ajax: function () {
  4. console.log('ajax');
  5. },
  6. post: function () {
  7. console.log('post');
  8. },
  9. get: function () {
  10. console.log('get');
  11. }
  12. }
  13. })();
  14. $.ajax();

image.png
image.png
测试方法

封装方法

  1. var $ = (function () {
  2. var o = window.XMLHttpRequest ?
  3. new XMLHttpRequest :
  4. new ActiveXObject('Microsoft.XMLHTTP');
  5. if (o) {
  6. return new Error('您的浏览器不支持异步发起HTTP请求');
  7. }
  8. function _doAjax(opt) {
  9. console.log(opt);
  10. var opt = opt || {},
  11. type = (opt.type || 'GET').toUpperCase(),
  12. async = opt.async || true,
  13. url = opt.url,
  14. data = opt.data || null,
  15. error = opt.error || function () { },
  16. success = opt.success || function () { },
  17. complete = opt.complete || function () { };
  18. if (!url) {
  19. throw new Error('您没有填写URL');
  20. }
  21. o.onreadystatechange = function () {
  22. if(o.readyState === 4){
  23. if (o.readyState >= 200 && o.status < 300 || o.status === 304) {
  24. success(JSON.parse(o.responseText));
  25. }
  26. }
  27. if (o.status === 404) {
  28. error();
  29. }
  30. complete();
  31. }
  32. o.open(type, url, async);
  33. type === 'POST' && o.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
  34. o.send(type === 'GET' ? null : formatDatas(data));
  35. }
  36. function formatDatas(obj) {
  37. var str = '';
  38. for (var key in obj) {
  39. str += key += '=' + obj[key] + '&';
  40. }
  41. return str.replace(/&$/, '');
  42. }
  43. return {
  44. ajax: function (opt) {
  45. _doAjax(opt);
  46. },
  47. post: function (url, data, callback) {
  48. _doAjax({
  49. type: 'POST',
  50. url: url,
  51. data: data,
  52. success: callback
  53. });
  54. },
  55. get: function (url, callback) {
  56. _doAjax({
  57. type: 'GET',
  58. url: url,
  59. success: callback
  60. })
  61. }
  62. }
  63. })();
  1. var $ = (function () {
  2. //三元运算符 相当于if else
  3. var o = window.XMLHttpRequest ?
  4. new XMLHttpRequest :
  5. new ActiveXObject('Microsoft.XMLHTTP');
  6. //判断浏览器是否支持ajax请求
  7. if (!o) {
  8. return new Error('您的浏览器不支持异步发起HTTP请求');
  9. }
  10. function _doAjax(opt) {
  11. console.log(opt);
  12. var opt = opt || {},//如果不存在opt,就给它弄个对象,默认值,||后面的是默认值
  13. type = (opt.type || 'GET').toUpperCase(),
  14. async = opt.async || true,
  15. url = opt.url,
  16. data = opt.data || null,
  17. error = opt.error || function () { },
  18. success = opt.success || function () { },
  19. complete = opt.complete || function () { };
  20. //处理没有传url的情况
  21. if (!url) {
  22. throw new Error('您没有填写URL');
  23. }
  24. o.onreadystatechange = function () {
  25. // if(o.readyState === 4&&o.status===200){
  26. // success(JSON.parse(o.responseText));
  27. // }
  28. //判断200 4太草率了 因为304也有可能 200 304都能成立
  29. if (o.readyState === 4) {
  30. if (o.readyState >= 200 && o.status < 300 || o.status === 304) {
  31. success(JSON.parse(o.responseText));
  32. }
  33. }
  34. if (o.status === 404) {
  35. error();
  36. }
  37. complete();
  38. }
  39. o.open(type, url, async);
  40. //如果type是POST,执行后面语句
  41. type === 'POST' && o.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
  42. o.send(type === 'GET' ? null : formatDatas(data));
  43. }
  44. //把服务器传送的json格式的数据转换成 xx&xx&xx
  45. function formatDatas(obj) {
  46. var str = '';
  47. for (var key in obj) {
  48. str += key += '=' + obj[key] + '&';
  49. }
  50. //把最后一个&去掉
  51. return str.replace(/&$/, '');
  52. }
  53. return {
  54. ajax: function (opt) {
  55. _doAjax(opt);
  56. },
  57. post: function (url, data, callback) {
  58. _doAjax({
  59. type: 'POST',
  60. url: url,
  61. data: data,
  62. success: callback
  63. });
  64. },
  65. get: function (url, callback) {
  66. _doAjax({
  67. type: 'GET',
  68. url: url,
  69. success: callback
  70. })
  71. }
  72. }
  73. })();
  74. // 原生ajax调用方法
  75. $.ajax({
  76. type: 'POST',
  77. url: 'http://localhost/network/class7/server/get_courses.php',
  78. data: {
  79. status: 1,
  80. flag: 2 //假参数 后端不接收此字段
  81. },
  82. success: function (data) {
  83. console.log(data);
  84. }
  85. });
  86. $.post('http://localhost/network/class7/server/get_courses.php', {
  87. status: 1,
  88. flag: 2
  89. }, function (data) {
  90. console.log(data);
  91. });
  92. $.get('http://localhost/network/class7/server/get_courses.php?status=1&flag=2', function (data) {
  93. console.log(data);
  94. })

第七篇:JS概述-WEB API - 晨颜的文章 - 知乎 https://zhuanlan.zhihu.com/p/494343190

第七篇:JS概述-WEB API - 晨颜的文章 - 知乎