• ajax理论


    form  --->   作用: 1、收集用户信息并提交给服务器 2、里面包含与用户交互的表单控件  3、form表单中不可见,但是不可以省略;
    
         属性: 1、action --> 定义表单提交时发生的动作,就是要提交的服务器地址URL;取值:服务器的处理程序地址*.js/.jsp/.php/*.do/.asp
    
                  2、method--> 表单提交数据的方式; 取值:get/post
    
                  3、enctype--> 指定表单数据的编码方式, 取值:text/plain  (所有字符,但是不包含特殊符号)   application/x-www-form-urlencoded (能包含所有特殊符号的字符) multipart/form-data  (可以上传文件)
    
    input ---> 主要属性:type 、 value、 name 、disabled(禁用,无值属性,不可修改数据,而且不提交数据)
    同步——>  只能做一件事,这件事昨晚才能做下一件事情;
    
    异步——>  多件事情同时进行;

    [ajax的异步加载]

    一、http协议--》 规范了数据是如何打包及传递的

    1、url

          结构:协议+主机名称+目录名称+文件名称

          url完整结构:<scheme>://<user>:<pwd>@<host>:<port>/<path>;<params>?<query>#<frag>

       <scheme> --> 方案、协议,以哪种方式获取浏览器的资源,ey:http/https/ftp

    常用协议 默认端口号 基本作用
    ftp 21 文件的上传下载
    ssh 22 安全的远程登录
    telnet 23 远程登录
    smtp 25 邮件传输协议
    dns 53 域名解析
    http 80 超文本传输
    pop3 110 邮件接收
    https 443 加密的传输http

         <params> --> 参数,服务器端使用

         <query> --> 查询字符串 

         <frag> --> 锚点

         【请求响应详解如下图:】

     http协议规定,客户端与服务器端传递的数据块Message(消息/报文)必须符合特定的格式,这个Message才能被客户端和服务器端彼此理解;

     

       1) 请求消息(请求起始行,请求头,请求主体)

    1、请求起始行:请求方法(get/post)、请求url、协议版本
    2、请求头:
         url: 告诉服务器请求的是哪一个主机
         connection:keep-alive  告诉服务器进行持久连接
         user-agent: 告诉服务器自己(浏览器)的类型
         accept-encoding: 告诉服务器自己(浏览器)的类型
         accept-encoding:gzip,deflate   告诉服务器,自己能接收的压缩文件的类型
         accept-Language:告诉服务器自己能接收的自然语言类型;
         referer:引用/推荐人,告诉服务器请求来自哪个网页;
    3、请求主体:Form data

            2)响应消息(响应其实行,响应头,响应主体1、响应起始行:     协议版本     响应状态码:告诉客户端浏览器,服务器的响应状态时什么     原因短句,对状态码的解释说明

    2、响应头:
         Date   告诉浏览器服务器的响应时间,格林威治时间,+8h为北京时间;
         connection:keep-live  告诉浏览器已经启动了持久连接;
    content-type: 告诉浏览器响应主体的类型时什么;
    text/html 响应回来的数据时html文本
    text/plain 普通文本
    text/css 样式文件
                application/javascript js 文件
    image/png(jpeg.gif) 图片
    application/json 响应回来的时json格式的字符串

    application/xml 响应回来的时xml格式的字符
    3、响应主体:响应回来的数据,network中,在header的右边第二个

      缓存的优点:

           1) 减少冗余的数据传输,节省客户端的流量;

           2) 节省服务器的带宽;

           3) 降低了对服务资源的消耗和运行需求;

           4) 降低了对远距离传输而造成的延迟加载;

            原理:

           1)请求-->无缓存 -->访问服务器-->存缓存--> 客户端得到数据;

           2)请求-->有缓存 -->新鲜-->命中缓存--> 客户端得到数据;

           3)请求-->有缓存 -->不新鲜-->访问服务器看是否过期--> 没过期-->更新缓存的新鲜度-->客户端得到数据;

           4)请求-->有缓存 -->不新鲜-->访问服务器看是否过期--已过期-->访问服务器-->存缓存-->客户端得到数据;

      与缓存相关的消息头

    Cache-Control: 从服务器将文档传到客户端时起,此文档处于新鲜的秒数,这个秒数时一个相对时间;
    语法:0不缓存
             max-age=新鲜秒数
    Expires http1.0 用法
    指定过期的确切时间,是一个具体的时间点;

      网页如何添加缓存

    <meta http-equiv="消息头" content="消息头对应的值">
    ex:
    <meta http-equiv="Cache-Conyrol" content="max-age=3600">   

      http性能优化

    1、http连接的过程
    发起请求——>建立连接——>处理请求——>访问资源——>构建响应——>发送响应——>记录日志
    
    2、http连接性能优化的思路
        2.1 减少请求次数;
        2.2 减少连接创建次数,开启持久连接;
        2.3    提高服务器端的运行速度;
        2.4 尽可能的减少响应数据的长度;
    
    3、安全的http协议
    
        https,安全的http
        ssl:  客户端发送请求消息时,在ssl层加密,服务器接收到加密文件在ssl层解密,得到请求明文,对请求进行处理(服务器发送响应消息时也是如此);

    DOM操作

    1、完成的javascript操作的组成

    1、js的核心:ECMA Script
    2、DOM:Docyment object model        文档对象模型
        让js动态的操作页面上的元素
    3、BOM   Browser Object model  浏览器对象模型
        让js动态的操作浏览器
    4、.DOM,这个阶段,获取页面上的元素,改变这个元素内容;

    2、简单的dom操作

      1)要获取的元素一定有id;

           2)  在js中,用id获取对象;h5支持简写,d1就是div对象

           innerHTML 是两个标签间的内容

    <div id="d1">这是测试文本</div>
    <script>
        var ele=document.getElementById("d1");
        console.log(ele.innerHTML);
    </script>

    3、获取/设置元素的内容innerHTML

      d1.innerHTML =...

      var str=d1.innerHTML;

    innerHTML指的是,双标签,开关标签间的所有内容,如果开关标签间有其他元素,会得到该元素的文本字符串 如果设置的是innerHTML是,添加了新标签,在语法正确的情况下,新标签也会在页面上渲染;

    4、事件--> 用户与页面的交互行为,调用js代码

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <div id="d1">我是一个div</div>
        <input onclick="show()" type="button" name="" value="你不是一个div">
        <script>
            var num=0;
            function show(){
    //            d1.innerHTML="你不是一个div";
                num++;
                d1.innerHTML=num;
            }    
        </script>
    </body>
    </html>

    例1:

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <div id="d1">测试</div>
        <input type="button" name="" value="打印" onclick="show()">
        <input type="button" name="" value="修改" onclick="updata()">
        <script>
            function show(){
                console.log(d1.innerHTML);
            }
            function updata(){
                d1.innerHTML="你好";
            }
        </script>
    </body>
    </html>

    获取元素的对象-->直接使用这个元素的id值

    获取/修改元素的内容(只有双标签叫内容)

    d1.innerHTML //可以获取/修改内容文本,还可以动态添加元素

    5、获取/设置表单控件的数据

       1) 使用input控件的id代表控件对象

          2)通过对象的value属性,获取/设置控件的值

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <div id="d1">测试</div>
        <input type="text" id="uname">
        <input type="button" name="" onclick="show()" value="获取文本">
        <script>
            function show(){
                console.log(uname.value);
            }
        </script>
    </body>
    </html>

    例1:

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <div id="d1">测试</div>
        <input type="text" id="content"><br>
        <input type="button" name="" onclick="show()" value="获取文本">
        <div id="d1"></div>
        <script>
            function show(){
                d1.innerHTML=content.value;
            }
        </script>
    </body>
    </html>

    例2:计算器

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <div id="d1">测试</div>
        <input type="text" id="num1">+
        <input type="text" id="num2">=
        <div id="res"></div><br>
        
        <input type="button" name="" onclick="caculate()" value="计算">
        
        <script>
            function caculate(){
                res.innerHTML=parseInt(num1.value)+parseInt(num2.value);
            }
        </script>
    </body>
    </html>

    6、允许通过用户的行为来激发的操作就是事件

    常用事件   onclick   用户点击元素,激发某项操作

    文本框/密码框,失去焦点事件  onblur

    文本框/密码框,获得焦点事件  onfocus

    [ajax - 01]

    1、ajax的步骤

    2、创建异步对象

    标准创建    var xhr=new XMLHttpRequest();

    IE8以下的创建

    var xhr=new ActiveXObject("Microsoft.XMLHttp");

    如何判断用户的浏览器版本?

    使用window.XMLHttpRequest属性

    如果是高版本,这个属性有值

    如果是浏览器不支持标准创建,这个属性为NULL

    if(window.XMLHttpRequest){
        var xhr=new XMLHttpRequest();
    }else{
        var xhr=new ActiveXObject("Microsoft.XMLHttp");
    }

     3、异步对象的常用属性和方法

    readystate   表示xhr对象的请求状态

    取值0-4  表示着5个状态

    0:请求尚未初始化

    1:打开服务器连接  正在发送请求

    2:接受响应头

    3:接受响应主体

    4:接受响应数据成功

    当readystate的值为4的时候,才表示所有的数据接收完毕

    onreadystatechange   当xhr的readystate属性发生改变时触发

    status   表示服务器的响应状态码

    只有在status=200,表示服务器已经正确处理了请求

    使用ajax的步骤:

      1、创建xhr对象

      var xhr=new XMLHttpRequest();

      2、绑定监听

    xhr.onreadystatechange=function(){
                if(xhr.readyState==4 && xhr.status=200){
                    // 接收响应
                    var result=xhr.responseText;
                }
    }

      3、打开连接、创建请求

      xhr.open(method,url,true);

      method必须是字符串“get”    "post"

      4、发送请求

      xhr.send();

      

      5、使用get发送带参数的请求

      【服务端代码】

    const express=require('express');
    // 引入用户路由器
    const userRouter=require('./routers/user.js');
    // 引入商品路由器文件
    const productRouter=require('./routers/product.js');
    // 引入存储路由器文件
    const cunchuRouter=require('./routers/cunchu.js');
    // 引入ajax路由器文件
    const ajaxRouter=require('./routers/ajax.js');
    // 引入第三方中间件
    const bodyParser=require('body-parser');
    // 创建web服务器
    var server=express();
    server.listen(3001);
    // 托管静态资源到public目录下ister.html
    server.use(express.static('public'));
    server.use(express.static('learn'));
    // 使用body-parser中间件将post请求数据解析为对象
    server.use(bodyParser.urlencoded({
        extended:false
    }));
    // 把用户路由器挂载到/user
    server.use('/user',userRouter);
    // 把商品路由器挂载到/product
    server.use('/product',productRouter);
    // 把存储路由器挂载到/cunchu
    server.use('/cunchu',cunchuRouter);
    // 把ajax挂载到/learn
    server.use('/learn',ajaxRouter);

    【路由器代码】

    const express=require('express');
    // 引入连接池
    const pool=require('../pool.js');
    // 创建空路由器
    var router=express.Router();
    // 添加路由
    
    // 1、用户注册
    router.get('/ajax',(req,res)=>{
        res.send("this is first ajax");
    });
    
    
    // 2、用户登录的路由
    router.get('/login',(req,res)=>{
        // 获取用户名称和密码
        var $uname=req.query.uname;
        console.log('uname is'+$uname);
        console.log('nihao');
        
        if(!$uname){
            res.send('用户名为空');
            return;
        }
        var $upwd=req.query.upwd;
        console.log('upwd is'+$upwd);
        if(!$upwd){
            res.send("密码为空");
            return;
        }
        // res.send("用户名为: "+$uname+"...密码为 "+$upwd);
        pool.query("select * from demp where uname=? and upwd=?",[$uname,$upwd],(err,result)=>{
            if(result.length>0){
                res.send('success');
            }else{
                res.send('fail');
            }
        });
    
    });
    
    
    // 导出
    module.exports = router;

    【ajax代码】

    <!DOCTYPE html>
    <html>
    <head>
        <title></title>
    </head>
    <body>
    
            <div>
                用户名称:<input type="text" id="uname">
            </div>
            <div>
                用户密码:<input type="password" id="upwd">
            </div>
            <input type="button" value="登录" onclick="login()">
            <div id="d1"></div>
                
        <script>
            function login(){
                // 1、创建异步对象xhr
                var xhr=new XMLHttpRequest();
                console.log(xhr);
                // 2、绑定监听
                xhr.onreadystatechange=function(){
                    if(xhr.readyState==4 && xhr.status==200){
                        var result=xhr.responseText;
                        d1.innerHTML=result;
                    }
                }
                // 3、打开链接,创建请求
                var un=uname.value;
    
                var up=upwd.value;
    
                var url="/learn/login?uname="+un+"&upwd="+up;
    
                xhr.open("get",url,true);
                // 4、发送请求
                xhr.send(null);
    
            }
        
        </script>
    
    </body>
    </html>

     

     

     

     

  • 相关阅读:
    P2207 Photo
    P1022 计算器的改良
    P1003 铺地毯
    P3014 [USACO11FEB]牛线Cow Line && 康托展开
    P4180 【模板】严格次小生成树[BJWC2010]
    P2776 [SDOI2007]小组队列
    P2426 删数
    P1948 [USACO08JAN]电话线Telephone Lines
    P1978 集合
    P1564 膜拜
  • 原文地址:https://www.cnblogs.com/hd-test/p/11804304.html
Copyright © 2020-2023  润新知