猪猪侠宝宝

导航

前端复习之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 ?>

 

posted on 2019-09-16 21:30  猪猪侠宝宝  阅读(286)  评论(0编辑  收藏  举报