zoukankan      html  css  js  c++  java
  • 服务器 6

    复习:

    AJAX:异步JS和XML,涉及到HTML、CSS、JS、DOM、HTTP、XML、JSON等。目标:无刷新无提交情况下实现页面内容局部更新,提高浏览体验。

    使用XHR发起异步请求步骤:

    (1)创建XHR

    (2)监听XHR的状态改变  0 1 2 3 4

    (3)连接到Web服务器

    (4)发送请求消息

    练习:dangdang的后台书籍录入系统——不跳转

    (1)编写SQL:dangdang.sql,表book( bid, bname, price, pic ),试着插入几行记录

    (2)编写PHP:book_add.php,接收客户端提交的bname, price, pic,插入到数据库中,成功则返回succ,失败则返回err。记得同步请求测试一下

    (3)编写HTML:book_add.html,没有表单,只有几个输入框,一个button按钮,单击后收集用户的输入,发起异步请求,提交给服务器

    今日目标:

    (1)复习XHR发起两种请求

    (2)学习XHR接收五种响应 —— 重点

    1.使用XHR发起两种请求之一——GET

      //1 var xhr = new XMLHttpRequest();

      //2 xhr.onreadystatechange = function(){}

      //3 xhr.open('GET', 'x.php?k=v&k=v', true)

      //4 xhr.send(null);

    2.使用XHR发起两种请求之二——POST

      //1 var xhr = new XMLHttpRequest();

      //2 xhr.onreadystatechange = function(){}

      //3 xhr.open('POST', 'x.php', true)

      //3.5 xhr.setRequestHeader('Content-Type',  'application/x-www-form-urlencoded')

      //4 xhr.send('k=v&k=v')

    3.使用XHR接收五种响应——text/plain

      服务器端:

           header('Content-Type: text/plain');

           echo 'succ';

      客户端:

           if( xhr.responseText==='succ'){ ... }

      案例演示:异步添加新的书籍信息

    4.使用XHR接收五种响应——text/html

      注意:AJAX应用中服务器返回的不是完整的HTML文档,而只是HTMP标签组成的片段

      服务器端:

           header(' Content-Type: text/html;charset=UTF-8  ');

           echo '<li>xx</li><li>yy</li>';

      客户端:

           ul.innerHTML = xhr.responseText;

      案例演示:搜索建议

      实现顺序:                                     

           (1)编写SQL:dangdang.sql,表book(....)

           (2)编写PHP:book_search.php,接收客户端提交的书名关键字kw,执行查询,返回所有包含该关键字的书名,以LI片段格式

           (3)编写HTML:book_search.html,包含一个输入框,只要用户输入了文本,下方立即显示出一个包含该文本的搜索建议

          

           input.onkeyup = function(){  var kw = this.value;   }

    扩展SQL语句——如何进行模糊查询

    SELECT * FROM book WHERE bname='指南'; //精准匹配

    SELECT * FROM book WHERE bname LIKE '指南'; //精准匹配

    SELECT * FROM book WHERE bname LIKE '%指南%'; //%匹配任意多个任意字符——模糊匹配

    5.使用XHR接收五种响应——application/javascript

      注意:JavaScript代码在PHP解释器看来就是普通的字符串而已;

      服务器端:

           header(' Content-Type: application/javascript');

           echo 'alert(123);document.body.appendChild(...)';

      客户端:

           eval( xhr.responseText ) //客户端必须使用eval来执行JS字符串

      案例演示:实现了国际化(i18n)的欢迎消息

      (1)编写PHP:i18n.php,解析客户端请求消息头部,获取当前客户端的首选语言,根据语言的不同,返回不同形式的欢迎消息,如alert('你好');  或 console.log('こんにちは');  或 var s = document.createElement('span'); s.innerHTML = 'Hello'; document.body.append(s);

      (2)编写HTML,i18n.html,一个按钮“获取欢迎消息”,点击后发起异步的GET请求,获得响应消息后,执行出来。

    服务器如何返回批量的复合数据给客户端?

    复合数据:一个数据有多个属性

    批量复合数据:有多个复合数据 —— 二维数组

    方式1:用text/plain格式

    101#三星#35.5#1.jpg@102#闪迪#34.5#2.jpg@金士顿#...

    好处:简单

    不足:不易读取、很容易出错

    方式2:用text/html格式

    <tr><td>101</td><td>三星</td><td>35.5</td></tr>

    <tr><td>102</td><td>闪迪</td><td>35.5</td></tr>

    <tr><td>103</td><td>金士顿</td><td>35.5</td></tr>

    好处:情形,方便使用   tbody.innerHTML = xhr.responseText

    不足:把数据和格式混在一起,限制了数据的应用场合

    方式3:用application/xml格式

    <productList>

      <product pid="101">

         <pname>三星</pname>

         <price>35.5</price>

         <pic>1.jpg</pic>

      </product>

      <product pid="102">

         <pname>闪迪</pname>

         <price>34.5</price>

         <pic>2.jpg</pic>

      </product>

    </ productList>

    好处:是纯数据,不附带任何的显示格式限制

    不足:太复杂了,阅读和解析都太麻烦

    方式3:用application/json格式

    [

      {

         "pid":"101",

         "pname":"三星",

         "price":35.5,

         "pic":"1.jpg"

      },

      {

         "pid":"102",

         "pname":"闪迪",

         "price":34.5,

         "pic":"2.jpg"

      }

    ]

    有点:简单、易于阅读,处理速度快!

    6.XML语法学习

      eXtensible Markup Language,可扩展的标签语言,本身是一种字符串格式,用于描述批量复合数据,语法:

      (1)所有的数据放在标签中:

           <名>数据</名>

           <名 />

      (2)整个XML字符串有且只能有一个根标签

      (3)所有的标签名都可以自定义,但严格区分大小写,且开始和结束标记必须完全一样

      (4)每个标签都可以自定义属性,属性必须有值,值必须用单引号/双引号括起来

      (5)每个标签都可以定义任意的子标签,标签可以嵌套,但不能交叉

    注意:HTML和XML的区别——面试题

             HTML语法随意;XML语法严格;

             HTML标签预定义好了;XML标签都是自定义的;

             HTML用于描述网页的结构;XML标签用于描述数据;

    7.使用XHR接收五种响应——application/xml

      服务器端:

           header('Content-Type: application/xml');

           echo '<?xml ?><productList>....</productList>';

      客户端:

           //xhr.responseText   //把字符串解析为DOM对象很麻烦

           xhr.responseXML  //DOM树的根对象

      案例演示:异步加载更多数据

      (1)编写SQL:dangdang.sql,表book(...)

      (2)编写PHP:book_select.php,向客户端返回所有的数据,以XML字符串格式

      (3)编写HTML:book_select.html,点击“加载更多”按钮时,再次请求更多的书籍信息

    W3C DOM标准分为三部分:

    核心DOM: 可以操作任意的DOM树,如getElementById()、querySelector()、getAttribute()....

    HTML DOM

    XML DOM

    8.JSON字符串格式的语法

      JSON(JavaScript Object Notation) 是一种轻量级的字符串数据格式。 易于人阅读和编写;同时也易于机器解析和生成;在Web编程领域可以取代XML字符串格式!

      (1)数据分为两种:  [ ]     { }

      (2)整个字符串要么是一个数组、要么是一个对象

      (3)数组中可以包含各种: 数字、boolean、字符串、null、[]、 {}

      (4)对象中可以包含多个键值对,键必须用双引号,值若是字符串也必须用双引号

    9.使用XHR接收五种响应——application/json

      服务器端:

           header('Content-Type: application/json;charset=UTF-8');

           $arr = ....;

           $str = json_encode($arr);  //把PHP数组转换为JSON字符串

           echo $str;

      客户端:

           JSON.parse( xhr.responseText ); //把JSON字符串解析为JS对象

    =============================

    10.ES6中新的字符串

      var str = `

           phone=${p}&pwd=${w}

      `;

      反引号字符串可以换行;可以包含${}的变量或表单式。

    课下练习:

    功能要求:

      (1)编写SQL,数据库名: tarena,员工信息表emp(eid,ename,pic, salary,deptID),保存多个员工的信息;

      (2)编写PHP,emp_select.php,根据客户端提交的部门编号(deptID),返回该部门下的员工信息;

    (3)编写HTML,emp_select.html,下拉框中选择不同的部门,则下方的员工列表显示出该部门的员工信息;

        select.onchange = function(){ this.value }

    (4)点击“删除”,发起异步请求删除该员工信息,服务器返回删除成功信息后,前端页面将表格中的当前行删除。

  • 相关阅读:
    发布几个DNN模块自己写的,功能还不完善
    c#冒泡排序正解!
    74很多小学生在学习加法时,发现“进位”特别容易出错。你的任务是计算两个三位数在相加时需要多少次进位。你编制的程序应当可以连续处理多组数据,直到读到两个0(这是输入结束标记)。
    69 N!阶乘是一个非常大的数,大家都知道计算公式是N!=N*(N1)······*2*1.现在你的任务是计算出N!的位数有多少(十进制)?首行输入n,表示有多少组测试数据(n<10)随后n行每行输入一组测试数据 N( 0 < N < 1000000 )
    96已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则求出w的后n1位的数。第一行为M,表示测试数据组数。接下来M行,每行包含一个测试数据。
    101输入两点坐标(X1,Y1),(X2,Y2)(0<=x1,x2,y1,y2<=1000),计算并输出两点间的距离第一行输入一个整数n(0<n<=1000),表示有n组测试数据;随后每组占一行由4个实数组成,分别表示x1,y1,x2,y2,数据之间用空格隔开 对于每组输入数据,输出一行结果保留两位
    266 给定一行字符,逆序输出此行(空格.数字不输出)
    98描述 输入一个百分制的成绩M,将其转换成对应的等级,具体转换规则如下:90~100为A;80~89为B;70~79为C;60~69为D;0~59为E;输入 第一行是一个整数N,表示测试数据的组数(N<10)
    50爱摘苹果的小明小明家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。苹果成熟的时候,小明就会跑去摘苹果。小明有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。现在已知10个苹果到地面的高度,以及小明把手伸直的时候能够达到的最大高度请帮小明算一下她能够摘到的苹果的数
    100 小南刚学了二进制,他想知道一个数的二进制表示中有多少个1,你能帮他写一个程序来完成这个任务吗?
  • 原文地址:https://www.cnblogs.com/Hale-Proh/p/7199794.html
Copyright © 2011-2022 走看看