Web API

Web API使用教程 是什么     Web Api,网络应用程序接口。它包含了广泛的功能,网络应用通过API接口,可以实现存储服务、消息服务、计算服务的能力,利用这些能力可以进行开发出强大功能的web应用。简单来说,就是一个接口,比如说,我们要做前后端分离的项目,前端和后端通过url连接,但是我们如何知道后端的数据是否通了,返回的数据是否正确,于是我们通过这个接口知道。 相似的技术     postma 阅读详情

JS的组成

在这里插入图片描述
在这里插入图片描述

  1. JS基础学习ECMAScript基础语法为后面做铺垫,Web APIs 是JS的应用,大量使用JS基础语法做交互效果
  2. API 是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
    简单理解:API是给程序员提供的一种工具,以便能更轻松的实现想要完成的功能
  3. Web API是浏览器提供的一套操作浏览器功能和页面元素的API(BOM和DOM)
    API是为我们程序员提供的一个接口,帮助我们实现某种功能,我们会使用就可以了,不必纠结内部如何实现
    Web API主要是针对浏览器提供的接口,主要针对于浏览器做交互效果

DOM

  1. 文档对象模型(DOM),是W3C组织推荐的处理可扩展标记语言(HTML或XML)的标准编程列的DOM接口,通过这些DOM接口可以改变网页的内容,结构和样式

  2. DOM树
    一个页面就是一个文档,DOM中使用document表示
    页面中的所有标签都是元素,DOM中使用element表示
    网页中的所有内容都是节点(标签,属性,文本,注释),DOM中使用node表示

  3. 通过DOM获取页面元素
    (1) ID
    因为我们文档页面从上往下加载,所以先得有标签,所以我们script写到标签的表面
    //参数id是大小写敏感的字符串
    //返回的是一个元素对象,Element对象。若没有这个元素返回null。
    var timer = document.getElementById(‘time’);
    //打印返回的元素对象,更好的查看里面的属性和方法
    console.dir(timer);
    (2) document.getElementsByTagName();通过标签名字获取
    // 1.返回的是 获取过来元素对象的集合 以伪数组的形式存储的
    var lis = document.getElementsByTagName(‘li’);
    console.log(lis);
    console.log(lis[0]);
    //2.我们想要依次打印里面的元素对象我们可以采取遍历的方式
    for (var i = 0; i < lis.length; i++) {
    console.log(lis[i]);

    }
    

(3) 通过HTML5新增的方法获取
1, getElementByClassName 根据类名获得某些元素集合
2, querySelector 返回指定选择器的第一个元素对象 切记 里面的选择器需要加符号

(4)
1. 获取Body元素
var bodyEle = document.body;
console.log(bodyEle);
console.dir(bodyEle);
2. 获取html元素
var htmlEle = document.documentElement;
console.log(htmlEle);

  1. 事件基础
    JS使我们有能力创建动态页面,而事件是可以被js侦测到的行为
    简单理解:触发—响应机制

  2. 在这里插入图片描述
    事件三要素:事件源,事件类型,事件处理程序
    执行事件步骤:
    1,。 获取事件源 (按钮)
    2,。 绑定事件也叫注册事件 (点击)
    3,。 添加事件处理程序 (弹出窗口)

  3. 常见鼠标事件
    在这里插入图片描述

  4. 操作元素(js的DOM操作可以改变网页内容,结构和样式,我们可以利用DOM操作元素来改变元素里面的内容,属性等。)
    (1)改变元素内容

  5. 在这里插入图片描述
    innerText 不能识别html标签,去除空格和换行
    innerHTML可以识别html标签,起始位置到终止为种子的全部内容,包括html标签,同时保留空格和换行
    这两个属性是可读写的(可读写的意思是都可以改变元素的标签都可以获取元素的标签) 可以获取元素里面的内容

  6. 在这里插入图片描述

  7. 表单操作
    (1)表单里面的值 文字内容是通过value来修改的
    input.value = ‘被点击了’;
    (2)如果想要某个表单被禁用 不能再点击disabled 我们想要这个按钮 button禁用
    btn.disabled = true;
    this.disabled = true; 指向的是事件函数的调用者
    (3)在这里插入图片描述

  8. 京东密码框案例
    在这里插入图片描述

<style>
        .box {
            position: relative;
            width: 400px;
            border-bottom: 1px solid #ccc;
            margin: 100px auto;
        }
        
        .box input {
            width: 370px;
            height: 30px;
            border: 0;
            outline: none;
        }
        
        .box img {
            position: absolute;
            top: 2px;
            right: 2px;
            width: 24px;
        }
    </style>
</head>

<body>
    <div class="box">
        <label for="">
            <img src="images/close.png" alt="" id="eye">
        </label>
        <input type="password" id="pwd">
    </div>
    <script>
        //1.获取元素
        var eye = document.getElementById('eye');
        var pwd = document.getElementById('pwd');
        //注册事件 处理程序
        var flag = 0;
        eye.onclick = function() {
            if (flag == 0) {
                pwd.type = 'text';
                flag = 1;
            } else {
                pwd.type = 'password';
                flag = 0;
            }

        }
    </script>
  1. 样式属性操作
    可以通过JS修改元素的大小、颜色、位置等样式
    JS里面的样式采取驼峰命名法,比如 fontSize,backgroundColor
    JS修改style样式操作,产生的是行内样式,css权重比较高
    在这里插入图片描述
    我们可以通过,修改元素的className更改元素的样式 适合于修改的样式较多或者功能复杂的情况

    this.className = ‘change’;
    新类名会覆盖原先的类名
    要想保留原先的类,又想要现在的类
    this.className = ‘big change’;

  2. 显示和隐藏
    点击btn,box隐藏
    btn.onclick = function() {
    box.style.display = ‘none’;
    }

  3. 焦点事件
    获得焦点 onfocus 失去焦点 onblur

	 var text = document.querySelector('input');
        //注册事件 获得焦点事件 onfocus
        text.onfocus = function() {
                // console.log('得到了焦点');
                if (this.value === '手机') {
                    this.value = '';
                }
                //获得焦点把文本框内的颜色变黑
                this.style.color = 'black';

            }
            //失去焦点事件 onblur
        text.onblur = function() {
            if (this.value === '') {
                this.value = '手机';
            }
            this.style.color = '#999';

        }

在这里插入图片描述
在这里插入图片描述

<style>
        .register {
            width: 600px;
            margin: 100px auto;
        }
        
        .message {
            display: inline-block;
            color: #999;
            font-size: 12px;
            padding-left: 10px;
        }
        
        .wrong {
            color: red;
        }
        
        .right {
            color: green;
        }
    </style>
</head>

<body>
    <div class="register">
        <input type="password" class="ipt">
        <p class="message">请输入6~16位密码</p>
    </div>
    <script>
        var ipt = document.querySelector('.ipt');
        var message = document.querySelector('.message');
        //注册事件,失去焦点
        ipt.onblur = function() {
            //根据表单里面值的长度
            if (this.value.length < 6 || this.value.length > 16) {
                message.className = 'message wrong';
                message.innerHTML = '你的位数不对,要求6-16位';

            } else {
                message.className = 'message right';
                message.innerHTML = '恭喜你,输入正确';
            }
        }
    </script>
  1. 操作元素总计
    在这里插入图片描述
  2. 排他思想
    如果想给相同的一组元素,设置样式,可以利用for循环;
    如果有同一组元素,我们想要某一个元素实现某种样式,需要用到循环的排他思想算法
    1. 所有元素全部清除样式(去掉其他人)
    2. 给当前元素设置样式(留下我自己)
    3. 注意顺序不能颠倒,首先干掉其他人,再设置自己
<script>
        var btns = document.getElementsByTagName('button');
        // btns得到的是一个伪数组,里面每一个元素 btns[i]
        for (var i = 0; i < btns.length; i++) {
            btns[i].onclick = function() {
                //(1) 把所有按钮背景颜色去掉
                for (var i = 0; i < btns.length; i++) {
                    btns[i].style.backgroundColor = '';
                }
                //(2)然后才让当前元素背景颜色为pink
                this.style.backgroundColor = 'pink';

            }
        }
    </script>

在这里插入图片描述
17. 给body换背景图片 hbody.style.backgroundImage = ‘url(’ + this.src + ‘)’;
`

在这里插入图片描述

  1. 表格隔行变色 遍历所有的行,用querSelectorAll ****querySelectorAll('tr')![在这里插入图片描述](https://img-blog.csdnimg.cn/20200225105746650.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1ptb25nbw==,size_16,color_FFFFFF,t_70) 鼠标经过事件和鼠标离开事件的分别注册事件![在这里插入图片描述](https://img-blog.csdnimg.cn/20200225111006680.png)
<script>
        var trs = document.querySelector('tbody').querySelectorAll('tr');
        //循环遍历 注册事件
        for (var i = 0; i < trs.length; i++) {
            trs[i].onmouseover = function() {
                this.className = 'bg';
            }
            trs[i].onmouseout = function() {
                this.className = '';
            }
        }
    </script>
  1. 表单全选取消全选案例
    在这里插入图片描述
<table cellspacing=0 cellpadding=0>
        <thead>

            <td>
                <input type="checkbox" name="" id="j_cbAll" />
            </td>
            <td>商品</td>
            <td>价钱</td>

        </thead>
        <tbody id="j_tbs">
            <tr>
                <td>
                    <input type="checkbox" name="" id="">
                </td>
                <td>Apple Watch</td>
                <td>2000</td>
            </tr>
            <tr>
                <td>
                    <input type="checkbox" name="" id="">
                </td>
                <td>iPhone8</td>
                <td>8000</td>
            </tr>
            <tr>
                <td>
                    <input type="checkbox" name="" id="">
                </td>
                <td>iPad Pro</td>
                <td>5000</td>
            </tr>
            <tr>
                <td>
                    <input type="checkbox" name="" id="">
                </td>
                <td>iPad Air</td>
                <td>2000</td>
            </tr>
        </tbody>
    </table>
    <script>
        // 全选和取消全选的做法
        var j_cbAll = document.getElementById('j_cbAll');
        var j_tbs = document.getElementById('j_tbs').getElementsByTagName('input');
        //注册事件
        j_cbAll.onclick = function() {
                // this.checked 可以得到当前复选框的选中状态,如果是true,就是选中。
                for (var i = 0; i < j_tbs.length; i++) {
                    //遍历j_tbs,如果this.checked为true则都为true
                    j_tbs[i].checked = this.checked;
                }

            }
            //复选框需要全部选中,上面全选才能选中:给下面所有复选框绑定点击事件,每次点击,都要循环查看下面的所有复选框是否有没有选中的,如果有一个没选中,上面全选就不选中
        for (var i = 0; i < j_tbs.length; i++) { //遍历,给每一个小的按钮绑定一个点击事件
            j_tbs[i].onclick = function() {
                // flag 控制全选按钮是否选中
                var flag = true; //一点击下面的按钮 flag就是true 就会执行下面的循环
                for (var i = 0; i < j_tbs.length; i++) { //循环小按钮,如果有一个没有被点击的flag就为false
                    if (!j_tbs[i].checked) {
                        flag = false;
                        break;
                    }
                }
                j_cbAll.checked = flag; //最后让上面的按钮执行 flag值
            }
        }
    </script>
什么是Web?Web Service、Web API傻傻分不清楚? 前言 分享一篇我在edx课程中看到的一篇英文文章,这篇文章详细阐述了Web、Web Server的含义,然后进一步介绍什么是Web API、Web Server、SOAP以及RESTFUL Web API的一些基础概念。本文根据个人的理解对原文进行了翻译,限于我的知识水平,若有翻译不到位的地方还请批评指正。 正文 Web究竟是什么意思? 如今,网络十分普及。运行在不同电脑上的软件可以互相“对话”。软件们进行交流时所使用的语言称之为“协议”(protocols)。比如你可能听说过的TCP、HTTP以及 阅读详情

相关推荐

Web API和Web Services的区分

举例说明,当我们需要出差的时候,要在携程App订购机票,我们会输入启程时间、返程时间、舱位选择等相关信息,单击搜索,系统会显示多家航空公司的机票张数和价格等信息,此时携程 App 就在后台与多家航空公司的 API进行交互,从而访问航空公司的数据、因此,Web API可以看作促进客户端机器与web服务器之间通信的接口。相比于XML,JSON是一种轻量级的数据交换格式,在Web Services中传输更快。灵活性:Web API的设计更加灵活,没有固定的规范,开发者可以根据自己的需求设计API的结构和行为。

奇峰卧虎 2476

Web API - 02

自定义属性的操作 获取自定义属性值 设置元素属性值 (1)element.setAtrribute(‘属性’,'值‘); 主要针对于自定义属性 div.setAtrribute(‘index’,2); (2)element.属性=‘值’; 设置内置属性 div.id = ‘test’; 移除属性值 removerAttribute(属性); div.removeAttribute(‘inde...

Mia的博客 189

【Web前端】Web API:构建Web应用核心

API(应用程序编程接口)是一组定义了软件组件之间如何交互的规则和协议。它允许一个程序调用另一个程序的功能,而不用了解其内部实现细节。Web 开发中,API 通常用于实现前端与后端之间的通信。除了内置的 DOM 事件外,开发者还可以创建和触发自定义事件,以便在应用程序内部传递信息。// 创建一个新的自定义事件// 添加自定义事件监听器');});// 模拟数据加载并触发自定义事件// 数据加载完成后触发自定义事件}, 2000);

m0_54851477的博客 1232

Web Service 和 Web API

Web Service 严格遵循 SOAP 协议,像一套严谨的“外交文书”系统,通过 XML 信封(SOAP Envelope)和 WSDL 契约书来确保跨语言、跨平台的绝对兼容性,但笨重缓慢;而 Web API 本质上是现代 HTTP 应用的“快递服务”,利用 GET/POST 等标准 HTTP 方法直接传输 JSON 数据,追求轻量、快速,是移动互联网时代前后端交互的主流text/xml。

weixin_46761444的博客 756

八个鲜为人知但很实用的Web API

在 Web API 中,有非常有用的对象、属性和函数可用于执行小到访问 DOM 这样的小任务,大到处理音频、视频这样的复杂任务。常见的 API 有 Canvas、Web Worker、History、Fetch 等。下面就来看一些不常见但很实用的 Web API。...

m0_73257876的博客 839

【JavaScript】客户端 Web API

根据MDN网站学习记录笔记 客户端 Web API一、Web API简介二、操作文档 Document2.1 DOM 基本介绍2.2 DOM基本操作2.3 动态购物单三、从服务器获取数据四、第三方API五、绘制图形六、视频和音频API七、客户端存储 一、Web API简介 应用程序接口(API)是基于编程语言构建的结构,它们抽象了复杂的代码,并提供一些简单的接口规则直接使用。 Web API是主要针对浏览器的API,在JavaScript语言中被封装成了对象,通过调用对象的属性和方法就可以使用Web A

msmxsd的博客 1247

什么是Web API 呢?

Web API 是一种基于 Web 的接口,允许不同的软件应用程序通过 HTTP 协议进行通信。它提供了一组预定义的方法、端点(URL)和数据格式,使得开发者能够轻松地访问和操作远程服务器上的数据或功能。例如,社交媒体平台的 API 允许第三方应用程序获取用户信息、发布动态等。

candy的博客 4303

【Web前端】Web API:构建 Web 应用核心!

说起 Web 前端,很多人脑海中浮现的可能是炫酷的页面、灵活的动画、甚至可能是“奇奇怪怪”的 Bug。但是,你有没有想过,支撑这些功能的背后力量究竟是什么?没错,就是Web API。今天,我们就来聊一聊这个“隐藏在水面下的冰山”。Web API 是如何成为 Web 开发的基石,又是如何让我们的前端变得如此灵活与强大。放心,咱们不仅会“讲道理”,还会通过实战案例手把手带你上手,轻松搞定!Web API,全称,简单来说就是浏览器为我们开发者提供的一系列功能接口。

喵手的博客 1545

API 和 Web API

DOM

pppylppp的博客 360

webmongo1.0

通过客户端访问服务器端 MongoDB的JavaScript API。本项目是[ dbcloud ]的一个分支(https://github.com/csmake/dbcloud) Accessing server-side mongodb through client javascript API. This project is a branch of [dbcloud](https://github.com/csmake/dbcloud) 你几乎可以完成绝大部分MongoDB调用通过浏览器的JavaScript API。 You can do almost invoke on mongodb through the javascript API in browser. 客户端的JavaScript API支持` IE6.0 +浏览器Firefox和微信(译者注:小程序和公众号)` The client javascript api support `IE6.0+ Chrome FireFox and Wechat` 应用场景: 快速原型设计,无需编写服务器端代码。 Rapid prototyping does not need to write server-side code. 学院派教学和研究,所见即所得 Academic teaching and research, WYSIWYG 企业内部应用 Enterprise internal application 对数据库表结构安全不关注的其他应用。 Other applications that do not focus on the security of the database table structure.

webapi + mongodb 基础实例 代码简单易懂 直接运行

webapi + mongodb 实现基础操作(数据的增删查改) 简单实例 代码易懂 直接运行 希望对新人有所帮助

web api教程Java_使用SpringBoot快速构建Web API

Dubbo 框架现在在国内的中小企业当中已经成为 Java 生态下服务化的事实标准,出现这种状态的原因很多,比如 Dubbo 框架设计优秀、文档和资料丰富、配置灵活、特性丰富等,但最主要的,我认为是 Java 开发人员对速度这一因素的痴迷。不可否认,Dubbo 框架设计和实现之初就将其自身定位为一款基于 TCP 长连接通信的高性能服务治理框架,但是,对于很多中小企业来说,不管从速度还是并发度,根本...

weixin_29104059的博客 874

Ubuntu 24.04 新增用户并禁用 root 账户操作指南

Ubuntu 24.04 新增用户并禁用 root 账户操作指南

深山技术宅的博客 1859

JavaScript基础-API 和 Web API

JavaScript基础-API 和 Web API

qq_51626500的博客 713

链路聚合Eth-trunk以及华为交换机配置实例

链路聚合简介 以太网链路聚合Eth-Trunk简称链路聚合,它通过将多条以太网物理链路捆绑在一起成为一条逻辑链路,从而实现增加链路带宽的目的。同时,这些捆绑在一起的链路通过相互间的动态备份,可以有效地提高链路的可靠性。 目的: 随着网络规模不断扩大,用户对骨干链路的带宽和可靠性提出越来越高的要求。在传统技术中,常用更换高速率的接口板或更换支持高速率接口板的设备的方式来增加带宽,但这种方案需要付出高额的费用,而且不够灵活。 采用链路聚合技术可以在不进行硬件升级的条件下,通过将多个物理接口捆绑为一个逻辑接口

ChaseAug的博客 2万+

CVE-2017-7921漏洞深度解析:海康设备明文密码泄露原理与七层防御

网络摄像头安全本质上是嵌入式Web服务安全,其核心在于身份认证机制是否健全。CVE-2017-7921并非传统远程执行漏洞,而是因信任错位导致的未授权API暴露——`/Security/users/1`接口绕过Session校验,直接返回admin明文密码。该问题根植于安防设备早期‘物理隔离+前端可控’的设计假设,在P2P、云平台等新场景下全面失效。技术价值在于揭示了轻量级HTTP服务中路径级访问控制缺失的普遍风险;典型应用场景包括ONVIF协议接管、Telnet后门登录及NVR侧横向移动。本文基于DS-2

weixin_33324197的博客 403

【C#】Web Api

Web API 什么是Web API 原文链接:https://www.cnblogs.com/guyun/p/4589115.html 官方定义如下,强调两个关键点,即可以对接各种客户端(浏览器,移动设备),构建http服务的框架。 Web API在ASP.NET完整框架中地位如下图,与SignalR一起同为构建Service的框架。Web API负责构建http常规服务,而SingalR主要负...

学海无涯苦作舟 1134

基于verilog的16QAM调制

思路1:正交调幅法——实现16QAM调制,可以理解为时相位相差90度的两个正弦波的4PAM叠加。 4比特输入经过2->4进制转化得到两路2比特输入,然后分别经过4PAM后叠加所得输出即为16QAM调制结果。 具体程序稍后编写。 思路2:复合相移法——可以借助前面编写的QPSK,相当于两路幅度不同的QPSK的叠加,比如幅度分别取1和3 。 思路1正交调幅法的设计方案: 两正弦波相位差...

weixin_30725467的博客 2929

Web Animations API的使用

文章目录前言一、认识Web动画API二、Web Animations API介绍1.Animation属性事件处理程序方法简单使用2.关键帧(Keyframe)格式属性简单使用1. 第一种(数组类型)2. 第二种(对象类型)3.EffectTiming属性简单使用三、一个例子1.使用CSS2.使用Web Animations API① .动画模型② .时序模型③ .创建500个img④ .开启动画⑤ .获取动画信息⑥ .开启、暂停、加速、减速动画⑦ .最终效果总结 前言 做Web开发的朋友对CSS动画应该

qq_35543489的博客 1101

YOLOv8中Bottleneck模块的残差连接机制解析

本文深入解析了YOLOv8目标检测模型中Bottleneck模块的核心设计,重点阐述了其残差连接机制。该机制通过构建一条信息“捷径”,有效缓解了深层网络中的梯度消失问题,稳定了训练过程,并提升了特征提取效率。文章结合代码详细拆解了模块结构,并探讨了其在YOLOv8骨干网络与检测头中的关键作用及参数调优思路。

weixin_29061821的博客 253

生成EtherCAT从站XML图片信息方法

详细介绍了EtherCAT从站XML文件中图片元素的生成方法。

kevin1499的博客 2128

什么是好的 Web Api

web api 就像一张名片一样,专业的名片可以迅速帮助你与客户之间建立信任感,也可能让你的产品在被使用前,就给客户留下业余,糟糕的负面印象。而一旦客户对你的产品产生负面情绪,这种情绪就会蔓延到产品生态圈甚至于相关公司上。

让 Java 再次伟大! 703

Vue3 - [最强] 超详细 Element Plus 组件库主题颜色进行 “统一全局“ 替换,将默认的蓝色主题色更换为其他自定义颜色,覆盖原来的主题色改为自己的颜色(完美解决主题色不生效、没反应)

elementplus修改主题色,vue3+element-plus主题色更换,vue3vite如何修改扩展elementplus主题色样式,全局设置elementplus主题色,有什么办法可以直接全局修改主题色,对elementplus默认蓝色不满意怎么替换更改其他颜色,elementplus覆盖默认主题色,elementplus主题色官方文档,vue3中修改elementplus主题色,elementplus修改主题色不生效怎么办,elementplus如何修改主题颜色,eleme

🏆 前端领域优质创作者 1万+

Web API 之 — Web Animations

现代的前端,在页面上做动画,已经是家常便饭。浏览器的渲染性能也越来越好,并且还逐渐提供了一系列的 Web Animations API。此 API 让开发者可以使用 js 来创建动画,相比之前使用 css 做动画会方便很多,同时相比以前传统的用 js 做的动画会更加高效,并且相信未来此 API 的能力会越来越大。 Web Animations 可查看 w3c 的规范文档。在 caniuse 上,可查看浏览器的支持情况,如下: 可看到,目前主流浏览器均已支持此 API 的基本功能。下面我们就来学习一下此 A

weixin_49067499的博客 895

GEE:关于遥感生态指数(RSEI)的若干疑问

本文记录了若干关于在 Google Earth Engine (GEE)平台上,计算基于主成分分析(PCA)的遥感生态指数(RSEI)的问题。并记录了解决这些问题的一些答案。问题包括,主成分分析的特征值的正负,主成分的占比,去云后空值像素的处理方法,异常值处理方法,如何看载荷等。

养乐多的博客 3417

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

上一篇: 简单数据类型和复杂数据类型
下一篇: Web API - 02
一麻袋小猫
博客等级 码龄9年 57粉丝 220原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值