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

    复习:

    AJAX:向服务器发起异步HTTP请求,接收处理返回的响应消息,目标是实现页面在无刷新无提交情况下页面内容的局部更新。

    使用AJAX发起两种请求消息:

      GET://1  //2  //3  //4

      POST : //1  //2  //3  //3.5  //4

    使用AJAX接收五种响应消息:

      (1)text/plain

           服务器端:

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

                  echo 'succ';

           客户端:

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

      (2)text/html

           服务器端:

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

                  echo "<tr><td>$data</td></tr>";

           客户端:

                  tbody.innerHTML = xhr.responseText

      (3)application/javascript

           服务器端:

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

                  echo "alert($data); f1(); f2($data)";

           客户端:

                  eval( xhr.responseText )

      (4)application/xml

           服务器端:

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

                  echo "<bookList><book>$b</book></bookList>";

           客户端:

                  var document = xhr.responseXML

      (5)application/json

           服务器端:

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

                  //echo "[ {"bname":"","price":35.5},{} ]";

                  $list = ...;

                  echo json_encode($list);

           客户端:

                  var obj = JSON.parse( xhr.responseText )

    练习: 实现学生查询系统

    (1)编写SQL:qinghua.sql,表qh_class( cid, cname, count ),插入三个班级(10/20/30);qh_student(sid, sname, score, classId),插入八九行记录

    (2)编写PHP:class_select.php,向客户端输出所有的班级信息,以JSON格式: [{},{},{}]

    (3)编写HTML:qinghua.html,页面加载完成(window.onload)后,异步请求,获取所有的班级信息,填充在一个select中

           <select>                                                                10:15

                  <option value="10">软件0801班</option>

           </select>

    (4)编写PHP:student_select.php,接收客户端提交的cid,返回指定班级中的学生数据,以JSON格式:  [{},{},{}]

    (5)修改HTML:qinghua.html,为select做事件绑定,监听选项改变,异步请求选定班级中的学生,显示在table中

           <table>

                  <thead></thead>

                  <tbody></tbody>

           </table>

    今日目标:

    (1)使用jQuery的AJAX封装函数——六个

       

      

    1.使用jQuery的AJAX封装函数之一——load()

      使用方法:

           $('选择器').load(URL, [请求数据], [成功后的回调函数])

           $('ul').load('search_suggest.php');

      含义说明:

           向指定的URL发起异步请求;若有请求数据,就是POST请求,否则就是GET请求;获取服务器端返回HTML片段响应,设置为当前选定元素的innerHTML。

      使用限制:

           (1)服务器返回的必需是HTML片段;

           (2)服务器端返回的数据会替换已有数据!

      案例演示: 异步加载多个页面完全一样的页头/页尾

      (1)编写header.php,只含有页头中的DIV片段

      (2)编写footer.php,只含有页尾中的DIV片段

      (3)编写jdindex.php,内容:                           

           <body>

                  <div id="header"></div>

                  <div id="main">XXXXXX</div>

                  <div id="footer"></div>

           </body>

           待页面加载完后,异步请求页头,放在#header中

           待页面加载完后,异步请求页尾,放在#footer中

    2.使用jQuery的AJAX封装函数之二——$.get()

      使用方法:

           $.get(URL, [请求数据], 响应成功后的回调函数)

           $.get('delete.php', 'sid=8', function(txt){ if(txt==='succ'){} })

           $.get('delete.php', {sid:8}, function(txt, msg, xhr){ if(txt==='succ'){} })

      含义作用:

           向指定的URL发起异步的GET请求,把请求数据追加在URL的后面;服务器给出了成功的响应会自动调用第三个参数——doResponse。

      提示:$.get会根据服务器端返回的响应消息内容类型自动决定如何处理,如applicatoin/json,会自动调用JSON.parse(xhr.responseText)进行解析!

      案例演示:实现异步的学生记录的删除

      案例演示:异步级联下拉列表                     $.get()  

      (1)编写SQL:qinghua.sql,产品类别表 qh_type( tid, tname ),插入三行数据(10-相机、20-洗衣机、30-手机),生产厂家表qh_producer( pid, pname, typeId ),插入若干记录;产品型号表 qh_model( mid, mname, producerId )

      (2)编写PHP:type_select.php,向客户端返回所有的产品类型,以JSON格式

      (3)编写PHP:producer_select.php,根据客户端提交的typeId,向客户端返回该类型所有的厂家,以JSON格式

      (4)编写PHP:model_select.php,根据客户端提交的producerId,向客户端返回该厂家生产的所有型号,以JSON格式

      (5)编写HTML,product.html,                             

      

       当页面加载完成后,异步请求所有的“产品类型”;

       当产品类型选项发生改变后,异步请求对应的“生产厂家”;

       当生产厂家选项发生改变后,异步请求该厂家的“产品型号”

    3.使用jQuery的AJAX封装函数之三——$.post()

      使用方法:

           $.post(URL, 请求数据, 响应成功后的回调函数)

      含义作用:

           向指定的URL发起异步的POST请求,把请求数据放置在请求主体——无需手写3.5步;服务器给出了成功的响应会自动调用第三个参数——doResponse。

      提示:$.post会根据服务器端返回的响应消息内容类型自动决定如何处理,如applicatoin/json,会自动调用JSON.parse(xhr.responseText)进行解析!

      案例演示:实现异步的用户注册

      (1)编写SQL:qinghua.sql,用户信息表 qh_user(uid, uname,upwd)

      (2)编写PHP:user_add.php,接收客户端提交的uname和upwd,返回succ或err

      (3)编写HTML:user_add.html,没有表单,只有两个输入域+BUTTON按钮,点击后异步提交给服务器   $.post(url, {uname:xx, upwd:xx}, fn)

    4.使用jQuery的AJAX封装函数之四——$.getScript()——了解

      使用方法:

           $.getScript(URL, [请求数据], [响应成功后的回调函数])

           $.getScript('x.php')

      含义作用:

           向指定的URL发起异步的GET请求,把请求数据放置在url后面;服务器给出了成功的响应会自动执行eval( xhr.responseText )

      使用限制:

           要求服务器必须返回application/javascript!即使不是,也会强制调用eval(xhr.responseText)进行执行!而$.get()可以实现同样的功能,却可以根据服务器端的响应头来决定是否调用eval()

    5.使用jQuery的AJAX封装函数之五——$.getJSON()——了解

      使用方法:

           $.getJSON(URL, [请求数据], 响应成功后的回调函数)

           $.getJSON('x.php', function(obj){})

      含义作用:

          向指定的URL发起异步的GET请求,把请求数据放置在url后面;服务器给出了成功的响应会自动执行JSON.parse( xhr.responseText )

      使用限制:

           要求服务器必须返回application/json!即使不是,也会强制调用JSON.parse(xhr.responseText)进行执行!而$.get()可以实现同样的功能,却可以根据服务器端的响应头来决定是否调用JSON.parse()

    上述五个函数的通病:只能处理成功的响应消息!如果服务器端返回了错误的响应消息(如404)上述五个函数不会有任何的提示——没有相关的回调函数!

    面试题:如何使用jQuery的AJAX相关函数,监听失败的响应消息??——使用万能AJAX封装函数:$.ajax

    6.使用jQuery的AJAX封装函数之六——$.ajax()——重点

      使用方法:

           $.ajax( {

                  type: 'GET',   //POST/PUT/DELETE...

                  url: 'x.php',

                  data: 'k=v&k=v',  //{k:v, k:v}

                  beforeSend: fn,      //在请求发送前的回调

                  success: fn,            //响应成功后的回调

                  error: fn,               //响应失败后的回调

                  complete: fn          //响应完成后(不论成败)的回调

           } )

    成功的调用:  beforeSend()  =>  success()  => complete()

    失败的调用:  beforeSend()  =>  error()  => complete()

    对应于原生AJAX:

    //1 var xhr = new XMLHttpRequest();

    //2 xhr.onreadystatechange = function(){

        if(xhr.readyState===4){

            if(xhr.status===200){

                success();

            }else {

                error();

            }

            complete()

        }

    }

    //3 xhr.open()

    beforeSend();

    //4 xhr.send()

    课后练习:仿beijing.huimaiche.com中的车辆展示

    (1)编写SQL,创建huimaiche.sql,保存车辆数据(cid,cname,price,count,type(lt8/lt15/lt30/suv))

    (2)编写PHP,创建car_list.php,根据客户端提交的车辆类别,返回该类别下所有汽车,以JSON格式

    (3)编写HTML,创建car_list.html,用户鼠标悬停在不同的车辆类别上,异步请求该类别下所有的汽车

    (4)编写PHP,创建car_select.php,根据客户端提交的cid,向客户端输出该车辆的所有信息,以JSON格式

    (5)修改car_list.html,当用户点击某个车辆的图片时,在下方显示出该车辆的全部信息

  • 相关阅读:
    复杂数据权限设计方案
    HTTP 错误 500.24
    C# 树形结构tree拼接
    MVC View返回list列表
    springboot使用validation 插件做数据校验
    java导出excel,多表头合并
    微信小程序表单验证
    springboot跑定时任务
    Springboot 上传excel并解析文件内容
    jmeter基本使用
  • 原文地址:https://www.cnblogs.com/Hale-Proh/p/7199801.html
Copyright © 2011-2022 走看看