• 前端复习之Ajax,忘完了


     1 *  Day01:
     2  * Ajax
     3   * Asynchronous JavaScript and XML
     4   * 直译中文 - JavaScript和XML的异步
     5   * (不严格的定义)客户端与服务器端进行交互,而无需刷新当前页面的技术,称之为Ajax
     6   * Ajax实现的是B/S架构下的异步交互
     7  * 实现异步交互的技术
     8   * <iframe src="">元素
     9  * 同步与异步的区别
    10   * 同步交互 - 客户端向服务器发送请求,到服务器端进行响应,这个过程中,用户是不能做任何其他事情的
    11    * 执行速度相对比较慢
    12    * 响应的是完整的HTML代码
    13   * 异步交互 -  客户端向服务器端发送请求,直到服务器端进行响应,这个过程中,用户可以做任何其他事情的
    14    * 执行速度相对比较快
    15    * 响应的是部分数据
    16   * Ajax具有核心对象
    17    * XMLHttpRequest对象
    18  * 创建XMLHttpRequest对象
    19   *
    20   * 属性
    21    * readyState - 表示当前服务器的通信状态
    22      * 0 - (服务器端)尚未初始化
    23      * 1 - (服务器端)正在接收
    24      * 2 - (服务器端)接收完毕
    25      * 3 - (服务器端)正在响应
    26      * 4 - (服务器端)响应完毕
    27    * status
    28      * 200 - 请求成功
    29      * 404 - 网页找不到
    30      * 500 - 服务器端的错误
    31   * 方法
    32    * open(method,URL) - 与服务器端建立连接
    33    * send() - 向服务器端发送请求
    34   * 事件
    35    * onreadystatechange
    36     * 作用 - 监听服务器端的通信状态改变
    37  * 实现Ajax异步交互步骤:
    38   1.创建XMLHttpRequest核心对象
    39     固定方法
    40     function getXhr(){
    41         var xhr=null;
    42         if(window.XMLHttpRequest){
    43             xhr=new XMLHttpRequest();
    44         }else{
    45             xhr=new ActiveXObject("Microsoft.XMLHttp");
    46         }
    47         return xhr;
    48      }
    49   2.与服务器建立连接
    50     * 使用XMLHttpRequest对象的open(method,url)方法
    51      * method - 设置当前请求的类型
    52        * GET - 
    53        * POST - 
    54      * url - 设置当前请求的地址
    55   3.向服务发送请求
    56     * 使用XMLHttpRequest对象的send(请求参数)方法
    57      * 请求参数格式为 - key=value
    58      * GET - send(null)
    59        * send()方法不起作用
    60        * 请求数据 - 增加在URL?key=value
    61      * POST - send()
    62        * 在send()方法调用前,调用setRequestHeader()方法
    63        xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    64   4.接受服务器端的响应数据
    65     * 使用XMLHttpRequest对象的onreadystatechange事件,监听服务器端的通信状态
    66     * 使用XMLHttpRequest对象的readystate属性,判断服务器的当前状态(0-4)
    67     * 使用XMLHttpRequest对象的status属性,判断服务器端的状态码(200)
    68     * 使用XMLHttpRequest对象的responseText属性,接受服务器端的响应数据
    69  * GET与POST的区别
    70   * GET请求类型
    71    * send()方法不起作用,但是不能被省略
    72      xhr.send(null);
    73    * 请求参数 - 添加到url?key=value
    74   * POST请求类型
    75    * send()方法起作用
    76     * 在send()方法被调用前,使用setRequestHeader()方法设置请求头信息
    77       xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    78 * 使用Ajax的原则
    79  * 小则怡情,大则上身
    80 * 另外的实现ajax的步骤
    81   * 创建XMLHttpRequest对象
    82   * 注册监听
    83   * 建立链接
    84   * 发送请求
    85 *

     1.get请求类型的异步交互 

    1 <?php
    2   //用于处理客户端的Ajax交互
    3   //1.接收客户端发送的请求数据
    4   $user=$_GET['user'];
    5   //2.向客户端进行响应
    6   echo 'get request successful';
    7 ?>
     1 <body>
     2   <input type="button" value="异步请求" id="btn">
     3   <script>
     4     //实现Ajax交互的步骤
     5     var btn=document.getElementById("btn");
     6     btn.onclick=function(){
     7     /*
     8      * 1.实现Ajax主要依靠XMLHttpRequest对象
     9      *  * 创建XMLHttpRequest对象
    10      *
    11      */
    12     var xhr=getXhr();
    13      /*
    14       * 2.与服务器端建立连接
    15       * * open(method,url,async)方法
    16       *  * method - 设置当前请求的类型(GET或POST)
    17       *  * url - 设置当钱的请求类型
    18       *  * async - 设置是否异步(Boolean)
    19       *   * 默认为true
    20       *  * 官方认为XMLHttpRequest就用来实现交互的,为false的话,报错
    21       */
    22      xhr.open("get","01.php?user=zhangwuji",true)
    23       /*
    24        * 3.客户端向服务器端发送请求
    25        * * send(请求参数)方法
    26        *  * 请求参数的格式 - key=value
    27        * * 如果请求类型为GET方式的话
    28        *  * send()方法是不能向服务器发送请求数据的
    29        * * 注意
    30        *  * send()方法是不能省略的
    31        *   * GET 请求类型 - send(NULL)
    32        */
    33       xhr.send(null);
    34        /*
    35         * 4.客户端接收服务器端的响应
    36         * * 使用onreadystatechange事件 - 
    37         *  *监听服务器
    38         * * readyState属性
    39         *  * 得到服务器端当前通信状态
    40         *  * 备选项
    41         *   * 0 尚未初始化(服务器端)
    42         *   * 1 正在发送请求
    43         *   * 2 请求完成
    44         *   * 3 正在响应
    45         *   * 4 响应完成
    46         *  * status-状态码
    47         *   * 200 OK
    48         *  * responseText属性
    49         *   * 接受服务器端的数据(HTML格式)
    50         */
    51      xhr.onreadystatechange=function(){
    52             //alert(xhr.readyState);
    53             if(xhr.readyState==4){
    54                 //alert(xhr.status);
    55                 if(xhr.status==200&&xhr.status<300||xhr.status==3){
    56                     //接受服务器端的数据
    57                     var data=xhr.responseText;
    58                     console.log(data);
    59                 }
    60             }
    61         }
    62     }
    63      function getXhr(){
    64         var xhr=null;
    65         if(window.XMLHttpRequest){
    66             xhr=new XMLHttpRequest();
    67         }else{
    68             xhr=new ActiveXObject("Microsoft.XMLHttp");
    69         }
    70         return xhr;
    71      }
    72   </script>
    73  </body>
    1 // 2.post请求类型的异步交互 
    <?php 2 //1.接受客户端发送的请求 3 $user=$_POST['user']; 4 //2.进行响应 5 echo $user.'post request successful'; 6 ?>
     1 <body>
     2   <input type="button" value="异步" id="btn">
     3   <script>
     4     var btn=document.getElementById("btn");
     5     btn.onclick=function(){
     6         //实现Ajax的异步交互
     7         var xhr=getXhr();
     8         xhr.open("post","02.php",true);
     9         /*
    10          * 如果Ajax使用post请求类型的话
    11          * * 必须在send()方法调用之前
    12          * * 使用setRequestHeader(key,value)方法
    13          *  * 该方法用于设置请求头
    14          */
    15          xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    16         xhr.send("user=zhangwuji");
    17         xhr.onreadystatechange=function(){
    18             if(xhr.readyState==4){
    19                 if(xhr.status==200){
    20                     var data=xhr.responseText
    21                     console.log(data);
    22                 }
    23             }
    24         }
    25     }
    26     function getXhr(){
    27         var xhr=null;
    28         if(window.XMLHttpRequest){
    29             xhr=new XMLHttpRequest();
    30         }else{
    31             xhr=new ActiveXObject("Microsoft.XMLhttp");
    32         }
    33         return xhr;
    34     }
    35   </script>
    36  </body>
     1 //3.表单的异步交互
    <?php 2 $user=$_POST['user']; 3 $pwd=$_POST['pwd']; 4 5 if($user=='admin'&&$pwd=='admin'){ 6 echo 'login successful'; 7 }else{ 8 echo 'login error'; 9 } 10 ?>
     1 <body>
     2   <form id="myform" name="myform" action="03.php" method="post">
     3     用户名:<input type="text" id="user" name="user"><br>
     4     密码:<input type="text" id="pwd" name="pwd"><br>
     5   <input type="button" id="btn"  value="登录">
     6   </form>
     7   <script>
     8     /*
     9      * <form>表单元素,存在submit按钮,提交表单
    10      * 使用Ajax提交表单的话,不需要submit
    11      *
    12      *
    13      */
    14      //1.位button按钮绑定onclick事件
    15      var btn=document.getElementById("btn");
    16      btn.onclick=function(){
    17         //使用Ajax实现表单提交
    18         var xhr=getXhr();
    19         xhr.open("post","03.php");
    20         xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    21         //send发送用户名和密码
    22         var user=document.getElementById("user").value;
    23         var pwd=document.getElementById("pwd").value;
    24 
    25         xhr.send("user="+user+"pwd="+pwd);
    26         xhr.onreadystatechange=function(){
    27             if(xhr.readyState==4&&xhr.status==200){
    28                 var data=xhr.responseText;
    29                 console.log(data);
    30             }
    31         }
    32      }
    33      function getXhr(){
    34         xhr=null;
    35         if(window.XMLHttpRequest){
    36             xhr=new XMLHttpRequest();
    37         }else{
    38             xhr=new ActiveXObject("Microsoft.XMLHttp");
    39         }
    40         return xhr;
    41      }
    42   </script>
    43  </body>

     4.普通二级联动与异步交互的二级联动

     1 <body>
     2  <select id="province">
     3     <option>请选择</option>
     4     <option>山东省</option>
     5     <option>陕西省</option>
     6     <option>吉林省</option>
     7  </select>
     8 
     9  <select id="city">
    10     <option>请选择</option>
    11  </select>
    12   <script >
    13   //1.为SELECT元素绑定onchange事件
    14   var provinceEle=document.getElementById("province");
    15   provinceEle.onchange=function(){
    16     //2.获取用户当前选择的省份名称
    17     //3.创建对应的城市列表 - 数组
    18     //遍历城市列表
    19         //4.创建<option>元素
    20         //5.将城市的信息添加到<option>元素上
    21         //6.将创建的所有<option>元素添加到ID为city的元素上
    22     
    23     var city=document.getElementById("city");
    24     var opts=city.getElementsByTagName("option");
    25     for (var z=opts.length-1;z>0 ; z--)
    26     {   //将id为city的元素内容清空
    27         city.removeChild(opts[z]);
    28     }
    29 
    30     var province =provinceEle.value;
    31 
    32     var cities=[];
    33     switch(province){
    34         case "山东省":
    35             cities=["青岛市","济南市","威海市","日照市"];
    36             break;
    37         case "陕西省":
    38             cities=["榆林市","神木","绥德","子州"];
    39             break;
    40         case "吉林省":
    41             cities=["长春市","松原市","通化市","四平市"];
    42             break;
    43     }
    44     for (var i=0;i<cities.length ;i++ )
    45     {
    46         var option=document.createElement("opotion");
    47         var textNode=document.createTextNode(cities[i]);
    48         option.appendChild(textNode);
    49         alert(textNode);
    50         //var city=document.getElementById("city");
    51         city.appendChild(option);
    52     }
    53   }
    54   </script>
    55  </body>
     1 <?php
     2    //用于处理客户端的请求二级联动的数据
     3    //1,接收客户端发送的省份信息
     4     $province=$_POST['province'];
     5     //echo $province;
     6    //2.判断当前的省份信息,提供不同的城市信息
     7     switch($province){
     8         case '山东省':
     9             echo '青岛市,济南市,威海市,日照市';
    10             break;
    11         case '陕西省':
    12             echo '榆林,神木,绥德,子州';
    13             break;
    14         case '吉林省':
    15             echo '长春市,松原市,通化市,四平市';
    16             break;
    17     }
    18     //服务器端响应的是一个字符串
    19 ?>
     1 <body>
     2    <select id="province">
     3     <option>请选择</option>
     4     <option>山东省</option>
     5     <option>陕西省</option>
     6     <option>吉林省</option>
     7  </select>
     8 
     9  <select id="city">
    10     <option>请选择</option>
    11  </select>
    12  <script>
    13     var provinceEle=document.getElementById("province");
    14     provinceEle.onchange=function(){
    15         //清空
    16         var city=document.getElementById("city");
    17         var opts=city.getElementsByTagName("option");
    18         for(var z=opts.length-1;z>0;z--){
    19             city.removeChild(opts[z]);
    20         }
    21 
    22         if(provinceEle.value!="请选择"){
    23         //执行ajax异步请求
    24         var xhr=getXhr();
    25         xhr.open("post","6.php",true);
    26         xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    27         xhr.send("province="+provinceEle.value);
    28         xhr.onreadystatechange=function(){
    29             if(xhr.readyState==4&&xhr.status==200){
    30                 //接收服务器端的数据内容
    31                 var data=xhr.responseText;
    32                 //data是字符串,转化为
    33                 //console.log(data);
    34                 var cities=data.split(",");console.log(cities[i]);
    35                 console.log(cities);
    36                 for(var i=0;i<cities.length;i++){
    37                     var option=document.createElement("option");
    38                     var textNode=document.createTextNode(cities[i]);
    39                     
    40                     option.appendChild(textNode);
    41                     
    42                     //var city=document.getElementById("city");
    43                     
    44                     city.appendChild(option);
    45                 }                
    46             }
    47         }
    48     }
    49     console.log(city);
    50     }
    51     function getXhr(){
    52         var xhr=null;
    53         if(window.XMLHttpRequest){
    54             xhr=new XMLHttpRequest();
    55         }else{
    56             xhr=new ActiveXObject("Microsoft.XMLHttp");
    57         }
    58         return xhr;
    59     }
    60  </script>
    61  </body>
     1 <?php
     2     //接收客户端发送的请求数据state
     3     $state=$_REQUEST['state'];
     4     //判断state
     5     if($state==1){//获取省份
     6         echo '山东省,陕西省,吉林省';
     7     }else if($state==2){//获取城市
     8         
     9         $province=$_POST['province'];
    10         switch($province){
    11         case '山东省':
    12             echo '青岛市,济南市,威海市,日照市';
    13             break;
    14         case '陕西省':
    15             echo '榆林,神木,绥德,子州';
    16             break;
    17         case '吉林省':
    18             echo '长春市,松原市,通化市,四平市';
    19             break;  
    21         }
    22     } 
    26 ?>
     1  <body>
     2   <select id="province">
     3     <option>请选择</option>
     4  </select>
     5 
     6  <select id="city">
     7     <option>请选择</option>
     8  </select>
     9  <script>
    10     var xhr=getXhr();
    11     //第一次执行ajax异步请求 - 省份
    12     window.onload=function(){
    13         
    14         xhr.open("get","08.php?state=1");
    15         xhr.send(null);
    16         xhr.onreadystatechange=function(){
    17         if(xhr.readyState==4&&xhr.status==200){
    18             var data=xhr.responseText;
    19             var provinces=data.split(",");
    20             for(var i=0;i<provinces.length;i++){
    21                 var option=document.createElement("option");
    22                 var text=document.createTextNode(provinces[i]);
    23                 option.appendChild(text);
    24                 var province=document.getElementById("province");
    25                 province.appendChild(option);
    26             }
    27         }    
    28         }
    29     }
    30     //第二次执行Ajax异步请求 - 城市
    31     var province=document.getElementById("province");
    32     province.onchange=function(){
    33         xhr.open("post","08.php?state=2",true);
    34         xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    35 
    36         //console.log(provinceEle.value);
    37         xhr.send("province="+province.value);
    38         xhr.onreadystatechange=function(){
    39             if(xhr.readyState==4&&xhr.status==200){
    40                 var data=xhr.responseText;
    41                 console.log(data);
    42                 var cities=data.split(",");
    43                 for(var i=0;i<cities.length;i++){
    44                     var option=document.createElement("option");
    45                     var text=document.createTextNode(cities[i]);
    46                     option.appendChild(text);
    47                     var city=document.getElementById("city");
    48                     city.appendChild(option);
    49                 }
    50             }
    51         }
    52     }
    53     function getXhr(){
    54         var xhr=null;
    55         if(window.XMLHttpRequest){
    56             xhr=new XMLHttpRequest();
    57         }else{
    58             xhr=new ActiveXObject("Microsoft.XMLHttp");
    59         }
    60         return xhr;
    61     }
    62  </script>

    Day02:

      1 Day 02:
      2 * 接收服务器端的响应数据
      3   * 使用XMLHttpRequest核心对象的responseText属性
      4   * 该属性只能接收文本(HTML)格式
      5   * 问题
      6     * 解析过程比较复杂(拆串)
      7     * 拆串或拼串极容易出错
      8 * XML格式
      9   * 基本内容
     10     * HTML XHTML dhtml XML的区别
     11       * HTML就是网页 - 元素定义大小写
     12       * XHTML就是严格意义的HTML - 元素定义小写
     13       * DHTML - BOM|DOM
     14       * XML - 配置文件|数据格式
     15     * XML文件的扩展名为".xml"
     16     * XML的定义方式与HTML非常相似
     17       * HTML的元素预定义好的
     18       * XML允许自定义元素
     19     * XML的版本
     20       * 1.0版本 - 
     21       * 1.1版本 - 几乎没人用
     22         * 版本不会再更xin
     23     * XML的作用
     24       * 作为数据格式 - 存储数据
     25   * XML语法
     26     * 声明
     27       <?xml version="1.0"  encoding="UTF-8"?>
     28       * version - 设置当前XML文件的版本
     29       * encoding - 设置当前XML文件的编码
     30       * 注意 - 必须出现在0行0列上
     31     * 定义元素
     32       * 根元素
     33         * 必须是起始标签
     34         * 只能定义一个
     35       * 定义元素
     36         * 元素名可以自定义
     37         * 分类
     38           * 起始标签或单标签
     39     * 定义属性
     40     * 定义注释
     41       * 
     42     *
     43   *
     44   * DOM解析XML
     45     * 创建XML的解析器
     46       
     47      function parseXML(){
     48         var xmlDoc=null;
     49         if(window.DOMParser){
     50             //其他浏览器
     51             var parser=new DOMParser();
     52             xmlDoc=parser.parseFromString("02.xml","application/xml");
     53         }else{
     54             //IE浏览器
     55             var parser=new ActiveXObject("Microsoft.XMLDOM");
     56             //异步
     57             parser.async="false";
     58             xmlDoc= parser.loadXML("02.xml");
     59         }
     60         return xmlDoc;
     61 
     62      }
     63     * 解析XML与解析HTML一致
     64       * 很少使用ById和ByName两个方法
     65     * 注意
     66       * 浏览器不允许读取外部的XML文件
     67       * 浏览器解析符合XML格式的字符串
     68     *
     69   * Ajax中的XML格式
     70     * 请求的数据格式 - XML
     71       * 客户端如何构建符合XML格式的数据
     72         * 构建的数据类型 - 字符串(string)类型
     73         * 字符串的内容符合XML格式的语法要求
     74       * 服务器端如何接收符合XML的数据
     75         * 接收客户端的请求数据 - 字符串(string类型)
     76         * PHP继承了DOM的相关内容
     77           * DOMDocument
     78           * DOMElement
     79           * DOMNode
     80     * 响应的数据格式 - xml
     81       * 服务器端如何构建符合XML格式的数据
     82         * 设置服务器端的响应头"Content-Type"值为"text/xml"
     83         * 构建一个符合XML格式的字符串(string)类型
     84           * 手动方式构建字符串string
     85           * DOMDOcument对象的方法
     86             * loadXML(符合XML格式的字符串)
     87             * saveXML()方法进行响应
     88       * 客户端如何接收符合XML格式的数据
     89         * 使用XMLHttpRequest对象的responseText属性接收
     90         * 接收回来的是XML DOM对象(不需要使用XML解析器解析)
     91 * JSON格式
     92   * 基本内容
     93     * JSON - Javascript Object Notation(JS原生支持)
     94   * JSON的结构
     95     * Array
     96     * Object
     97     * 支持的数据类型
     98       * String字符串
     99       * Number数值
    100       * Boolean
    101       * Object
    102       * Array
    103       * null
    104   * Ajax中的JSON格式
    105     * 请求格式为JSON
    106       * 客户端向服务器断发送请求 - JSON格式的数据
    107         * 构建符合JSON格式的字符串
    108         * 保证定义字符串时,使用单引号(里面使用双引号)
    109       * 服务器端接收
    110         * 接收客户端的数据
    111         * 使用json_decode()函数进行解析
    112           json_decode($json,true)
    113     * 响应格式为JSON
    114       * 服务器端向客户端发送响应为JSON格式的数据
    115         * 使用json_encode()函数将PHP变量(array)转换为符合JSON格式的字符串
    116       * 客户端接收JSON格式的数据
    117         * 使用XMLHttpRequest对象的responseText属性接收
    118           * 没有responseJSON属性
    119         * 使用eval()函数进行转换
    120  
    121 * HTML(文本格式)、XML格式、JSON格式的优缺点
    122   * HTML
    123     * 优点 - 简单
    124     * 缺点 - 解析复杂
    125   * XML
    126     * 优点 - 易于构建复杂数据
    127     * 缺点 - 构建、解析复杂
    128   * JSON
    129     * 优点 - 轻量级
    130     * 缺点 - 可能转换失败
    131   }]'
      3.在PHP中如何将数组转换成JSON字符串?
       通过json_encode(数组)
      4.前端页面将取回的JSON字符串转换成js对象/数组
       通过JSON.parse(数据)
     1 //02.xml文件
    <?xml version="1.0" encoding="ISO-8859-1" ?> 3 <users> 4 <!-- 这是注释 --> 5 <user id="01"> 6 <name>zhangsanfeng</name> 7 <age>18</age> 8 <job>jiaozhudie</job> 9 <addr>guangingding</addr> 10 <love /> 11 </user> 12 <user id="02"> 13 <name>zhangsanzhu</name> 14 <age>19</age> 15 <job>eat</job> 16 <addr>154</addr> 17 <love /> 18 </user> 19 </users>
     1 <script>
     2     function parseXML(xml){
     3         var xmlDoc=null;
     4         if(window.DOMParser){
     5             //其他浏览器
     6             var parser=new DOMParser();
     7             xmlDoc=parser.parseFromString("02.xml","application/xml");
     8         }else{
     9             //IE浏览器
    10             var parser=new ActiveXObject("Microsoft.XMLDOM");
    11             //异步
    12             //parser.async=false;
    13             xmDoc.async=false;
    14             xmlDoc= parser.loadXML("02.xml");
    15         }
    16         return xmlDoc;
    17 
    18     }
    19      var xmlDoc=parseXML("<user id='01'><name>zhangsanfeng</name></user>");
    20 
    21      var userEle=xmlDoc.getElementsByTagName("user")[0];
    22      var nameEle=userEle.getAttribute("name");/*????????????????????*/
    23      var nameTxt=nameEle.childNodes[0].nodeValue;
    24      console.log(nameTxt);
    25   </script>
     1 /03.xml
    <?xml version="1.0" encoding="utf-8" ?> 2 <china> 3 <province id="01" name="山东省"> 4 <cities> 5 <city>青岛市</city> 6 <city>济南市</city> 7 <city>威海市</city> 8 <city>日照市</city> 9 <city>德州市</city> 10 </cities> 11 </province> 12 <province name="辽宁省"> 13 <cities> 14 <city>大连市</city> 15 <city>沈阳市</city> 16 <city>铁岭市</city> 17 <city>锦州市</city> 18 <city>丹东市</city> 19 </cities> 20 </province> 21 <province name="陕西省"> 22 <cities> 23 <city>A市</city> 24 <city>B市</city> 25 <city>C市</city> 26 <city>D</city> 27 <city>E</city> 28 </cities> 29 </province> 30 31 </china>
     1 <script>
     2  //1.
     3     function parseXML(xml){
     4         var xmlDoc=null;
     5         if(window.DOMParser){
     6             var parser=new DOMParser();
     7             xmlDoc=parser.parseFromString("03.xml","application/xml");
     8         }else{
     9             xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
    10             xmlDoc.async=false;
    11             xmlDoc.loadXML("03.xml");
    12         }
    13         return xmlDoc;
    14     }
    15 //2.
    16     var xmlDoc=parseXML('<province id="01" name="山东省"><city name="青岛市"/><city name="济南市"/><city name="威海市"/><city name="日照市"/><city name="德州市"/></province>');
    17     //a.
    18     var proEle=xmlDoc.getElementsByTagName("province")[0];
    19     var proTxt=proEle.getAttribute("name");
    20     console.log(proTxt);
    21     //b.
    22     var citiesEle=xmlDoc.getElementsByTagName("city");//数组
    23     for(var i=0;i<citiesEle.length;i++){
    24         var cityEle=citiesEle[i];
    25         var cityTxt=cityEle.getAttribute("name");
    26         console.log(cityTxt);
    27     }
    28  </script>
     1 <?php
     2     //接受客户端发送的请求
     3     $user=$_POST['user'];//符合XML格式要求的string
     4     //var_dump($user);
     5     
     6     //创建DOMDocument对象
     7     $doc = new DOMDocument();
     8     //2.调用loadXML()方法
     9     $result=$doc->loadXML($user);
    10     //var_dump($doc);
    11     //echo $user;
    12 
    13 
    14     //echo $doc->saveXML();
    15 
    16     //1.如何构建符合XML格式的数据
    17     //修改响应头的Content-Type值为"text/xml"
    18     //header('Content-Type:text/xml');
    19     
    20     $doc->saveXML();
    21 ?>
     1 <body>
     2   <input type="button" value="Ajax" id="btn">
     3   <script>
     4     var btn=document.getElementById("btn");
     5     btn.onclick=function(){
     6         //实现Ajax的异步交互
     7         var xhr=getXhr();
     8         xhr.open("post","07.php");
     9         xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    10         /*
    11          * 如何构建符合XML格式的请求数据
    12          * * 注意
    13          *   * 请求数据的格式 - key=value不能改变的
    14          * * 将value值构建成符合XML格式的数据
    15          *   * 数据类型 - 字符串(string)
    16          *   * 格式符合XML的语法要求
    17          * * 编写注意
    18          *   * 定义变量 - 专门构建XML格式的数据
    19          *   * 在send()方法进行拼串
    20          */
    21          var user="<user><name>zhangsanfeng</name><age>18</age></user>";
    22         xhr.send("user="+user);
    23         xhr.onreadystatechange=function(){
    24             if(xhr.readyState==4&&xhr.status==200){
    25                 //
    26                 //var data=xhr.responseText;
    27                 //console.log(data);
    28                 var xmlDoc=xhr.responseXML;
    29                 var nameEle=xmlDoc.getElementsByTagName("name")[0];
    30                 var txtEle=nameEle.childNodes[0];
    31 
    32             }
    33         }
    34     }
    35     function getXhr(){
    36         var xhr=null;
    37         if(window.XMLHttpRequest){
    38             xhr=new XMLHttpRequest();
    39         }else{
    40             xhr=new ActiveXObject("Microsoft.XMLHttp");
    41         }
    42         return xhr;
    43     }
    44   </script>
    45  </body>

     Day03:

      1 Day 03:
      2   * jQuery中的Ajax
      3     * 封装第一层 - 类似于原生Ajax的用法
      4       * $.ajax() - 最复杂
      5          * 选项 - 格式是{key:value}
      6          *   * url - 请求地址
      7          *   * type - 请求类型,默认get
      8          *   * async - 是否异步,默认true
      9          *   * Content-Type  - POST方式发送数据的前提
     10                * 默认值为application/x-www-form-urlencoded
     11          *   * data - 请求数据,格式必须为key:value
     12          *   * success - 请求成功后的回调函数
     13                * function(data,textStatus){}
     14                  * data - 服务器端响应的数据内容
     15                  * textStatus - 表示ajax请求的状态
     16                    * success
     17          *   * error - 请求失败后的回调函数
     18                * function(XMLHttpRequest,textStatus,errorThrown){}
     19                  * XMLHttpRequest - ajax的核心对象
     20                  * textStatus - 表示ajax请求的状态
     21                    * error、timeout、notmodified等
     22                  * errorThrown - 错误异常
     23              * dataType - 设置响应数据格式
     24     * 封装第二层 - 基于第一层再次封装
     25       * load()   - 最简单、局限性最大
     26          * $().load(url,data,callback)
     27          *  * url - 必要,设置当前Ajax请求的地址
     28          *  * data - 可选,设置当前Ajax请求的数据
     29               * 格式必须是key/value格式
     30          *  * callback - 可先,当前Ajax请求成功后的回调函数
     31               * 该回调参数的行参(data)就是服务器端响应的数据内容
     32          *  * 问题
     33               * 请求类型由是否发送请求数据决定
     34                 * 没有请求数据时,请求类型是GET
     35                 * 发送请求数据时,请求类似是POST
     36               * 默认接收服务器端的数据内容
     37                 * 是以字符串类型(HTML格式)进行接收
     38                 * 无法使用XML或JSON格式
     39             *
     40          *
     41       * $.get()  - 请求类型GET
     42         * $.get(url,data,callback,type)
     43              *  * url - 设置当前Ajax请求的地址
     44              *  * data - 设置当前Ajax请求的数据
     45                   * 格式要求为key:value,构建object
     46                 * callback - 当前Ajax请求成功后的回调函数
     47                 * type - 设置服务器端响应的数据格式
     48                   * 默认值 - HTML格式
     49                   * xml - XML格式
     50                   * json - JSON格式
     51              * 注意
     52                * 无论是否发送请求数据,请求类型都是GET
     53                * $.get()方法可以使用HTML格式、XML格式及json格式
     54              *
     55       * $.post() - 请求类型是POST
     56         * 使用方式与$.get()方式一致
     57     * 封装第三层 - 特殊用法
     58       * $.getScript() - 动态读取脚步(JavaScript代码)
     59         * $.getScript(url,callback)
     60          * * url - 读取脚本的地址
     61          * * callback - 读取成功后的回调函数
     62              * function(data){}
     63       * $.getJSON()   — 接收JSON格式数据
     64     *
     65   * 表单的ajax请求
     66     * 表单的序列化
     67          *  serialize() - 返回JSON字符串
     68             * 使用表单元素的name属性
     69             * {key:value}
     70          *  seriaizeArray() - 返回JSON对象
     71             * JSON对象是由一个对象数组组成的
     72             * [ele1,ele2,ele3,...]
     73       * 注意
     74         * 表单中必须有name属性
     75   * jQuery.form插件
     76     * 作用 - 实现表单的异步提交
     77     * 两个核心方法
     78       * ajaxForm()方法
     79       * ajaxSubmit()方法 - 使用ajax异步提交表单
     80     * 底层机制
     81      * 表单提交机制
     82   * 表单异步提交的方式
     83     * 不再使用submit按钮,而使用button按钮
     84        通过button按钮绑定click事件,实现ajax异步提交
     85        * 表单的序列化
     86        * 表单的异步提交
     87     * 依旧使用submit按钮
     88<form>原素绑定onsubmit事件
     89       在onsubmit的处理函数中
     90         * 表单的序列化
     91         * 表单的异步提交
     92         * 阻止表单的默认行为(return false)
     93  * 跨域请求 - $.getJson() 方法
     94    * 跨域
     95      * 完全跨域 - IP不同
     96        * http://www.baidu.com
     97        * http://www.tedu.coom
     98      * 跨子域 - IP相同但端口号不同
     99        * http://127.0.0.1:8000
    100        * http://127.0.0.1:8888
    101    * 域名
    102      * 顶级域名
    103        * http://baidu.com
    104      * 二级域名
    105        * http://wenku.baidu.com
    106        * http://www.baidu.com/kongjian
    107      * 
    108    * 万维网协议
    109      * 默认不允许跨域请求的
    110    * 实现跨域
    111        如何实现跨域请求
    112            * 使用JSONP形式的回调函数来加载其他网域的JSON数据
    113              * JSONP - JSON with Padding(JSON的一种使用模式)
    114                * 核心内容 - HTML的<script //>元素具有开放策略
    115            * 实现方式
    116              * $.getJSON()方法的URL后增加请求数据
    117               $.getJSON("09.php?callback=?",function(data){});
    118  * Cookie
    119    * 基本内容
    120      * 浏览器的缓存
    121        * 存储在浏览器内存中
    122          * 关闭浏览器(窗口)后,数据会被自动销毁
    123        * 存储在用户电脑硬盘中
    124          * 关闭浏览器(窗口)后,数据不会销毁
    125     * Cookie(小甜饼)
    126       * 缓存文件 - 一些用户数据存储在此
    127     * 问题
    128       * 用户数据是以明码来存储的
    129       * Cookie谁都可以读取
    130       * A网站生成的Cookie文件,归属到百度
    131   * 如何操作
    132     * 读取Cookie
    133     * 写入Cookie -134 
    135 Ajax PROJECT:
    136  * Web开发工具
    137   * webStorm软件
    138     * webStorm如何创建PHP页面
    139       注意:webStorm并不支持php
    140       * 下载PHPstorm软件
    141     * 配置php
    142     * 点击工具栏"File"->"SetTing",弹出配置窗口
    143     * 选择“Editor
     1// jQuery中的load方法
    <?php 2 //1.接收客户端的请求数据 3 $name=$_POST['name']; 4 $age=$_POST['age']; 5 var_dump($name); 6 var_dump($age); 7 //2.向客户端进行响应 8 //echo 'load sucess'; 9 10 echo '{"name":"zhuzhuxia","age":"23"}'; 11 ?>
     1  <body>
     2     <input type="button" id="btn"value="load"/>
     3     <div></div>
     4     <script>
     5         $("#btn").click(function(){
     6         /*
     7          * click事件中,调用load()方法
     8          * $().load(url,data,callback)
     9          *  * url - 必要,设置当前Ajax请求的地址
    10          *  * data - 可选,设置当前Ajax请求的数据
    11          *    * 格式必须是key/value格式
    12          *  * callback - 可先,当前Ajax请求成功后的回调函数
    13               * 该回调参数的行参(data)就是服务器端响应的数据内容
    14          * 注意
    15            * 服务器端响应的数据自动写入到<div>元素
    16              * 现象的原因 - div元素调用load()方法
    17            * load()方法的请求类型
    18              * 没有请求数据时,请求类型是GET
    19              * 发送请求数据时,请求类似是POST
    20              * load()方法的请求类型由是否发送请求数据来决定
    21            * load()方法接收服务器短的响应数据
    22              * 是以字符串类型来接受的
    23              * 
    24          */
    25 
    26         //请求数据格式为key/value,就是object对象
    27 
    28          var user={"name":"zhangsanfeng","age":"18"};
    29          $("div").load("01.php",user,function(data){
    30              //var json=eval("("+data+")");
    31             console.log(data);//只能使用html格式或字符串,JSON不行
    32             
    33          });
    34     });
    35     </script>
     1 //jQuery中的get方法或post方法
    <?php 2 //1.接收客户端请求的数据 3 $name=$_GET['name']; 4 $age=$_GET['age']; 5 //var_dump($name); 6 //2.向客户端进行响应 7 //a.响应格式为HTML格式 8 //echo 'get success'; 9 //b.响应格式为XML格式 10 //header("Content-Type:text/xml"); 11 //echo '<user><name>zhuzhuxai</name><age>25</age></user>'; 12 //c.响应格式为json格式 13 echo '{"name":"aboluo","age":"30"}'; 14 ?>
     1 <body>
     2    <input type="button" id="btn1" value="get"/>
     3    <input type="button" id="btn2" value="post"/>
     4    <script>
     5         $("#btn1").click(function(){
     6             /*
     7              * $.get(url,data,callback,type)
     8              *  * url - 设置当前Ajax请求的地址
     9              *  * data - 设置当前Ajax请求的数据
    10                   * 格式要求为key:value,构建object
    11                 * callback - 当前Ajax请求成功后的回调函数
    12                 * type - 设置服务器端响应的数据格式
    13                   * 默认值 - HTML格式
    14                   * xml - XML格式
    15                   * json - JSON格式
    16              * 注意
    17                * 无论是否发送请求数据,请求类型都是GET
    18                * $.get()方法可以使用HTML格式、XML格式及json格式
    19              */
    20              var user={"name":"zhangsangfeng","age":"20"};
    21              $.get("02.php",user,function(data){
    22                 //1.console.log(eval("("+data+")"));
    23                 //2.
    24                 console.log(data)
    25              },"json");
    26         
    27         });
    28    </script>
    29 
    30  </body>
    1 //jQuery中的ajax方法
    <?php 2 echo 'post success'; 3 ?>
     1 <body>
     2   <input type="button" value="ajax" id="btn"/>
     3   <script>
     4     $("#btn").click(function(){
     5         /*
     6          * $.ajax(options)方法
     7          * * 选项 - 格式是{key:value}
     8          *   * url - 请求地址
     9          *   * type - 请求类型,默认get
    10          *   * async - 是否异步,默认true
    11          *   * Content-Type  - POST方式发送数据的前提
    12                * 默认值为application/x-www-form-urlencoded
    13          *   * data - 请求数据,格式必须为key:value
    14          *   * success - 请求成功后的回调函数
    15                * function(data,textStatus){}
    16                  * data - 服务器端响应的数据内容
    17                  * textStatus - 表示ajax请求的状态
    18                    * success
    19          *   * error - 请求失败后的回调函数
    20                * function(XMLHttpRequest,textStatus,errorThrown){}
    21                  * XMLHttpRequest - ajax的核心对象
    22                  * textStatus - 表示ajax请求的状态
    23                    * error、timeout、notmodified等
    24                  * errorThrown - 错误异常
    25              * dataType - 设置响应数据格式
    26          */
    27         var user={"name":"zhuzhaxia","age":"26"};
    28 
    29          $.ajax({
    30             url:"04.php",
    31             type:"post",
    32             async:true,
    33             date:user,
    34             success:function(data,textStatus){
    35                 console.log(data);
    36                 console.log(textStatus);
    37             },
    38             error:function(){
    39                 console.log(textStatus);
    40                 console.log(errorThrown);
    41             }
    42          });
    43     });
    44   </script>
    45  </body>

    jQuery中的ajax实现简单聊天

     1 <body>
     2   <input type="text" id="chatdata"/>
     3   <input type="button" id="btn" value="发送"/>
     4   <div></div>
     5   <script>
     6     /*
     7      * 需求
     8      * * 客户端
     9          * 用户在输入框中输入内容
    10          * 用户点击发送按钮,使用$.ajax()执行Ajax请求
    11          * 接收服务器端响应数据写入到<div>元素中
    12        * 服务器端
    13          * 接收客户端发送的聊天内容
    14          * 将聊天内容响应回去(json)格式
    15      *
    16      *
    17      */
    18 
    19     var chatlist="";//不能赋值null
    20 
    21 
    22     $("#btn").click(function(){
    23         var data={"value":$("#chatdata").val()};
    24 
    25         $.ajax({
    26             url:"05.php",
    27             type:"post",
    28             async:true,
    29             data:data,
    30             dataType:"json",
    31             success:function(data,textStatus){
    32                 //console.log(data);
    33                 //console.log(textStatus);
    34                 
    35                 chatlist+="<p>"+data.chat+"</p>";
    36 
    37                 $("div").html($(chatlist));
    38             },
    39             /*error:function(){
    40                 console.log(textStatus);
    41                 console.log(errorThrown);
    42             }*/
    43         });
    44     });
    45   </script>
    <?php
        //接收客户端的数据
        $value=$_POST['value'];//-->key
        //var_dump($value);
        //2.进行响应
        echo '{"chat":"'.$value.'"}';
    ?>

    动态读取脚本:

     1 <body>
     2   <input type="button"value="读取" id="btn"/>
     3   <div id="comments"></div>
     4 <!-- 这段JS代码在HTML页面加载时被加载-->
     5   <!--<script src="script.js"></script>-->
     6   <script>
     7     $("#btn").click(function(){
     8         /* 
     9          * $.getScript(url,callback)
    10          * * url - 读取脚本的地址
    11          * * callback - 读取成功后的回调函数
    12              * function(data){}
    13          */
    14         $.getScript("06.php",function(data){
    15             console.log(data);
    16         });    
    17     });
    18   </script>
    19  </body>
    <?php
    	echo '$("#comments").html("<p>zhuzhuxia</p><p>hahaha哈</p>")';
    ?>
    

      表单的AJax请求:

     1 <body>
     2   <form id="myform" name="myform" action="07.php" method="post">
     3     用户名:<input type="text" id="username" name="username" ><br>
     4     密码:<input type="text" id="password" name="password"><br>
     5     <input type="button" value="登录" id="btn"/>
     6 
     7   </form>
     8   <script>
     9     /*
    10      * 需求
    11      * * 当用户输入用户名密码,点击登录按钮时
    12      * * 使用jQuery中的$.post()方法执行ajax的异步请求
    13      * * 服务器端判断登录是否成功
    14      *
    15      *
    16      */
    17      $("#btn").click(function(){
    18          /*1.data封装表单中的用户名和密码的信息
    19         var data={
    20             "username": $("#username").val(),
    21             "password": $("#password").val()
    22         };*/
    23 
    24         //2.
    25         var data=$("#myform").serialize();//表单中得定义name属性
    26 
    27         /*
    28          * 客户端向服务器端发送的请求数据
    29          * * 格式要求需为{key:value}
    30          * * 手工方式构建这种格式的数据
    31          * 如果这种完成
    32          * * 无论具有多少表单元素,表单只有一个
    33          *   只获取表单,通过某种机制自动将表单中所有元素的值,构建成{key:value}格式的数据
    34          * 表单的序列化
    35          *  serialize() - JSON字符串
    36             * 使用表单元素的name属性
    37             * {key:value}
    38          *  seriaizeArray() - JSON对象
    39             * JSON对象是由一个对象数组组成的
    40             * [ele1,ele2,ele3,...]
    41          */
    42         $.post("07.php",data,function(data){
    43             console.log(data);        
    44         });
    45      });
    46   </script>
    47  </body>
     1 <?php
     2     //1.
     3     $username=$_POST['username'];
     4     $password=$_POST['password'];
     5     //2.判断是否登录成功
     6     if($username=='admin'&&$password=='admin'){
     7         echo 'login success';
     8     }else{
     9         echo 'login error';
    10     }
    11 ?>

    序列化完成用户注册功能:

     1  <body>
     2   <form id="regist">
     3     用户名:<input type="text" name="username"/><br>
     4     密码:<input type="text" name="password"/><br>
     5     确认密码:<input type="text" name="repassword"/><br>
     6     email:<input type="text" name="email"/><br>
     7     地址:<input type="text" name="addr"/><br>
     8     <input type="button" value="注册" id="btn"/>
     9   </form>
    10   <script>
    11     //需求 - 表单ajax异步提交,表单序列化
    12     $("#btn").click(function(){
    13         //1.表单序列化
    14         var data=$("#regist").serialize();
    15         //2.表单异步提交
    16         $.post("08.php",data,function(data){
    17             console.log(data);
    18         });
    19     });
    20   </script>
    21  </body>

    跨域请求:

     1 <body>
     2  <!--
     3    创建html页面和php页面(模拟)
     4    * html页面放在一个域
     5    * php页面放在另一个域
     6  -->
     7   <input type="button" value="跨域请求" id="btn"/>
     8   <script>
     9     $("#btn").click(function(){
    10         /*
    11          * $.getJSON(url,data,callback)方法
    12          * * URL - 请求地址
    13          *   data - 请求数据
    14          *   callback - 请求成功后的回调函数
    15 
    16          * 该方法返回的是JSON
    17 
    18            如何实现跨域请求
    19            * 使用JSONP形式的回调函数来加载其他网域的JSON数据
    20              * JSONP - JSON with Padding(JSON的一种使用模式)
    21                * 核心内容 - HTML的<script>元素具有开放策略
    22            * 实现方式
    23              * $.getJSON()方法的URL后增加请求数据
    24                url?callnck=?
    25          */
    26         $.getJSON("09.php?callback=?",function(data){
    27             console.log(data);
    28         });
    29     });
    30   </script>
    31  </body>
     1 <?php
     2     //
     3     //echo '{"msg":"post success."}';
     4     $callback=$_GET['callback'];
     5     //2.输出$callback
     6     //var_dump($callback);
     7     /*
     8      * 3.向客户端进行响应 - json
     9      *  * 如何callback是一个函数的话,假设$callback 就是函数的名称
    10      *  * 函数的调用体 - $callback(实参)
    11         * 向该函数传递的参数为实参
    12      */
    13     echo $callback.'({"msg":"get success."})';
    14 ?>
  • 相关阅读:
    第二阶段冲刺第七天,6月6日。
    第二阶段冲刺第六天,6月5日。
    第二阶段冲刺第五天,6月4日。
    第二阶段冲刺第四天,6月3日。
    第二阶段冲刺第三天,6月2日。
    第二阶段冲刺第二天,6月1日。
    垃圾收集器与内存分配策略(1)
    OutOfMemoryError异常
    对象访问
    java内存区域与内存溢出异常(2)
  • 原文地址:https://www.cnblogs.com/Dummer/p/11530323.html
Copyright © 2020-2023  润新知