• 服务器8


    复习:

    见思维导图

    练习:学生按分数级别显示     

    (1)编写SQL:tarena.sql,表student(sid, sname, pic, scoreGrade(A-B-C-D)),插入12条记录

    (2)编写PHP:student_select.php,根据客户端请求分数级别,返回该级别下有哪些学生,以JSON格式

    (3)编写HTML:student.select.html,页头提供ABCD四个级别,鼠标悬停在某个级别上,立即异步请求该级别有哪些学生

    今日目标:            

    (1)PPT上的小知识点拾遗

    (2)AJAX阶段项目 —— 重点

    1. JS中如何处理JSON字符串

      把JSON格式的字符串解析为JS对象:

           var str = '{"ename":"Tom", "age":20}';

           var obj = JSON.parse(str);           //方法1

           var obj = eval( '('+str+')' );           //方法2,不推荐使用

      把JS对象编码为JSON字符串:

           var obj = {ename:'Tom', age: 20};

           var str = JSON.stringify(obj);   

         -ify: 使变为...,   sheepify    stoneify    frogify

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

      PHP中把数组编码为JSON字符串:

           $list = [{},{},{}];

           $str = json_encode( $list );

      PHP中JSON字符串解析为PHP数组/对象:

           $str = '{"ename":"Tom", "age":20}';

           $obj = json_decode( $str );

    2.面试题:跨域请求和JSONP

      Cross Domain Request:从一个资源请求另一个资源,二者所在的请求地址不同,域名不同、端口号不同、请求协议不同。

           http://www.tmooc.cn/list.html

           http://www.tedu.cn/student_select.php

      提示:localhost和127.0.0.1也算跨域!

      浏览器允许跨域请求的情形

           IMG、LINK、SCRIPT、IFRAME ...

      浏览器禁止跨域请求的情形

           XHR  —— 浏览器处于安全考虑,禁用了XHR的跨域请求(其实服务器给出了响应消息,但浏览器不让使用)

    面试题:我们公司项目很大,页面很多,出于性能考虑,把静态资源(html等)放在http://static.tmooc.cn服务器上了,把动态资源(php)放在http://dynamic.tmooc.cn服务器上了,如何让一个x.html异步请求x.php呢?

    如何解决浏览器的XHR跨域请求限制 —— 八种方案:

      (1)

      (2)

      (3)

      (4)

      (5)

      (6)

      (7) 修改响应消息头部,添加Access-Control-Allow-Origin头部

      (8) 使用JSONP——非常巧妙

    JSON: JavaScript Object Notation,是一种字符串数据格式(羊肉)。

    JSONP:JSON with Padding,填充式JSON,与JSON完全两码事,是一种使用JSON数据的方式(把羊肉红烧)。意思是在JSON字符串左右添加函数名: doResponse( {"ename":"Tom", "age":20} );

    JSONP是专用于解决XHR跨域限制一种手段。基本原理:使用动态创建的一个SCRIPT标签代替XHR发起异步请求,要求服务器必须返回application/javascript,立即在客户端执行——要执行的函数本体在客户端浏览器中声明。

      <script src="x.php" async></script>

    面试题:jQuery中如何使用JSONP发起异步请求:

    (1) $.getJSON()

      用途1:使用XHR发起异步请求(不能跨域)

           $.getJSON('x.php', doResponse)

      用途2:使用JSONP发起跨域异步请求

           $.getJSON('http://跨域地址/x.php?callback=?', doResponse)

    (2) $.ajax()

      用途1:使用XHR发起异步请求(不能跨域)

           $.ajax({  })

      用途2:使用JSONP发起跨域异步请求

           $.ajax({ dataType: 'jsonp' })

    3.AJAX阶段项目 —— 京东购物车

      功能点描述

      (1)异步的用户登录

      (2)异步的显示商品列表,实现分页显示

      (3)异步的添加到“我的购物车”

      (4)查看“我的购物车”

      (5)异步的修改“我的购物车”

      项目标准: 根据注释,大家在前面写,我在后面提示——项目代码必须有自己的思路!

      实现步骤:   SQL => PHP => HTML/JS                

      (1)编写SQL:jd.sql,数据库名jd,

           创建表:jd_user(uid, uname, upwd),插入2行记录:

                                10    qiangdong     123456

                                20    naicha            456789

           创建表:jd_product(pid, pname, price, pic),插入36行记录;

           创建表:jd_cart( cid,  userId ),插入一行记录:

                                101          10

           创建表:jd_cart_detail(did, cartId, productId, count),插入如下的3行测试记录:                    

                                1    101   15        3      

                                2    101   18        1

                                3    101   21        2

      (2)编写PHP:data/header.php,包含页头必需的HTML片段(第一阶段项目中寻找)——不是完整的HTML!

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

           <div>....</div><div>....</div>

      (3)编写PHP:data/footer.php,包含页尾必需的HTML片段(第一阶段项目中寻找)——不是完整的HTML!

      (4)编写HTML:productlist.html,待页面加载完成,异步加载页头和页尾。

           $('#header').load('data/header.php')

           注意:控制台不能有404错误!

      (5)编写PHP:user_login.php,接收客户端提交的uname和upwd,执行数据库验证,返回 {"code":1, "uname":"qiangdong", "uid":10} 或 {"code":2, "msg":"用户名或密码错误" }

           $str = "{"code":1, "uname":"$uname"}";  echo $str;

           $arr = ['code'=>1, 'uname'=>$uname];   echo json_encode($arr);

    -------------------文华的进度线---------------------

      (6)修改HTML:productlist.html,默认显示出登录对话框,异步登录验证,失败则提示错误消息,成功则清除掉对话框,显示“欢迎回来:xxxx”

      (7)编写PHP:product_select.php,向客户端输出所有的产品信息,以JSON格式:[{},{},{},....]

      (8)修改HTML: productlist.html,页面加载完后,异步请求所有的产品

      (9)编写PHP:cart_product_add.php,接收客户端提交uid、pid,添加入购物车详情表,若已有该商品,则购买数量+1  —— 需要执行多条SQL语句,有挑战性!

    4.JS和CSS加载外部资源的路径问题

      JS是运行于HTML网页中,JS中请求的资源的路径使用相对于HTML文件的路径;

      CSS是独立被浏览器解释,CSS中使用外部资源(如图片)路径使用相对于CSS文件的路径;

  • 相关阅读:
    Mac 10.13安装telnet
    如何用万用表判断一个12V蓄电池是否没电
    CentOS 7开机不执行/etc/rc.local的解决方法
    华为S5300系列交换机限制特定IP可以登录Web
    Java Bean Validation 最佳实践
    一文说清文本编码那些事
    定义物料组(Material Group)
    kibana 搜索语法
    微服务相关
    Solve Error: nafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) already defined in libcpmt.lib(newaop.obj)
  • 原文地址:https://www.cnblogs.com/Hale-Proh/p/7199813.html
Copyright © 2020-2023  润新知