首页 > 代码库 > 服务器 7

服务器 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="http://www.mamicode.com/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,当用户点击某个车辆的图片时,在下方显示出该车辆的全部信息

 

服务器 7