Ajax — 第二天

Ajax-02

今天内容:

  • 安装浏览器插件

  • 聊天机器人案例

  • Form表单提交

  • 模板引擎(新的概念,难点)

  • 两个案例

Chrome浏览器插件安装

安装步骤

下载插件的网站:

  • https://www.gugeapps.net/ 无需扫码

  • http://www.cnplugins.com/ 需要扫二维码验证

  • 从上述两个网站下载的插件,和从Chrome商店下载的插件是一样的。只不过Chrome商店被和谐了,打不开。

如何安装使用插件

  • 下载下来的插件形如 JSONView.crx。可以把后缀换成 zip
  • 使用解压软件解压它,得到一个文件夹

在这里插入图片描述

  • Chrome --> 更多工具 --> 扩展程序 --> 打开开发者模式 --> 加载已解压的扩展程序 --> 选择上一步解压得到的文件夹

  • 最终效果

在这里插入图片描述

jsonview插件

美化JSON的插件

postman

测试接口的工具

在这里插入图片描述

在这里插入图片描述

聊天机器人案例

案例演示与分析

  • 聊天的时候,每个人说的话,用一 <li> 标签标示
    • 小思同学说的话,<li class="left_word">
    • 我们说的话,<li class="right_word">
  • 后面有一个 <audio src=""> ,用于播放语音,我们只需要设置src属性为一个音频文件地址即可自动播放
  • 需要我们手动加载 scroll.js ,它里面封装的一个函数 resetui() ,用于重置聊天区的滚动条。

渲染自己说的话

点击发送按钮的时候,获取输入框的值,然后调用函数。

// 单击事件
// 给 发送 注册单击事件 $('#btnSend').on('click', function () {// 1. 渲染自己说的话let myWord = $('#ipt').val().trim(); // 取得输入框的值renderMyWord(myWord);// 2. 得到对方的回应,并渲染到页面中// 3. 播放语音});
// 封装一个函数,渲染自己说的话function renderMyWord (myWord) {let str = `<li class="right_word"><img src="img/person02.png" /> <span>${myWord}</span></li>`;// 把str放到ul后面$('#talk_list').append(str);// 清空输入框的内容$('#ipt').val('');// 重置滚动条,否则后面说的话看不见了resetui(); // scroll.js 里面封装的函数,作用是可以重置滚动条// 渲染机器人的回应renderRobotWord(myWord);}

获取并渲染机器人说的话

// 获取机器人的回应,并渲染到页面中function renderRobotWord (myWord) {// 按照接口文档,发送ajax请求。获取机器人的回应$.get('http://www.liulongbin.top:3006/api/robot', {spoken: myWord}, function (res) {// console.log(res);if (res.message === 'success') {// 组装一个li标签。把机器人的回应渲染到页面中let str = `<li class="left_word"><img src="img/person01.png" /> <span>${res.data.info.text}</span></li>`;// 把str追加到ul中$('#talk_list').append(str);// 重置滚动条resetui();// 调用把文字转成语音的函数playVoice(res.data.info.text);}});}

把机器人说的话转成语音

// 播放语音function playVoice (text) {$.get('http://www.liulongbin.top:3006/api/synthesize', {text: text}, function (res) {// console.log(res);if (res.status === 200) {// 设置 audio 标签的src属性$('#voice').attr('src', res.voiceUrl);}});}

输入框按回车和点击发送一样的效果

// 优化 - 在输入框里按回车,也能够发送(让按回车的效果和点击发送按钮的效果一样)$('#ipt').keyup(function (e) {// 键盘弹起之后,触发的函数// 获取键盘的keyCode值// let keyCode = e.keyCode; // jQuery封装的属性,可以获取到键盘的keyCodelet keyCode = e.which; // jQuery封装的属性,也可以获取到键盘的keyCode// 判断,是否按的是回车键if (keyCode === 13) {// 说明按了回车键// 解决方案一:renderMyWord($(this).val().trim());// 解决方案二:触发 发送按钮的单击事件// $('#btnSend').click(); // $('#btnSend').trigger('click');}});

attr和prop

prop适合用在属性的值是布尔值的情况下。比如:

  • <input readonly />
  • <input type="checkbox" checked />
  • <input type="radio" checked />
  • <input disabled />
  • <select> <option selected></option> </select>

除此之外,其他的任何属性都用 attr();

表单的组成

  • form标签

  • 表单域

    • input type=“text”
    • input type=“password”
    • input type=“checkbox”
    • input type=“radio”
    • input type=“file” 文件域
    • input type=“hidden” 隐藏域
    • select>option
    • textarea 多行文本域
  • 按钮

    <!--下面的按钮 会 造成表单的提交-->
    <button> 提交 </button>   ====  <button  type="submit"></button>   ====   <input type="submit" value="提交" /><!--下面的按钮 不会 造成表单的提交-->
    <button  type="button">提交<button>  =====   <input type="button" value="提交" />
    

form标签的属性

<!--- 
action 属性,表示表单提交的地址,默认空,表示提交到当前页面
method 属性,表示提交方式,可选GET和POST,默认是GET
--->
<form action="http://www.liulongbin.top:3006/api/addbook" method="POST"><input type="text" name="username"><br><button type="submit">提交</button>
</form>

在这里插入图片描述

提前了解:

  • GET方式提交表单,我们输入的值(请求参数)会拼接到url后面。
  • POST方式提交表单,请求参数,不会拼接到url上。

在这里插入图片描述

推荐的提交表单的方案

  • 监听表单的提交事件
  • 阻止表单提交(阻止标签的默认行为)
  • 使用JS代码来收集表单数据
  • 将收集到的数据,通过ajax来提交

使用jQuery提供的方法来快速收集表单数据

  • $('form').serialize(); – 得到一个字符串

    bookname=aaa&author=bbb&publisher=ccc
    
  • $('form').serializeArray(); – 得到一个数组

    [{name: 'bookname', value: 'aaa'},{name: 'author', value: 'bbb'},{name: 'publisher', value: 'ccc'}
    ]
    

细节问题:

  • 表单域必须指定name属性。否则,serialize或serializeArray不会收集到值
  • 使用serialize和serializeArray得到的结果,可以直接作为ajax请求的data使用

评论案例

监听表单提交事件说明

监听表单提交事件,可以有下面两种写法:

  • $('form').submit(事件处理函数) — 推荐方案
  • $('提交按钮').click(事件处理函数);

模板引擎简介

  • 字符串大量拼接的问题

    • 性能及其低下
    • 结构上,html和js代码混合到一起了
  • 解决办法

    • 模板引擎
  • 模板引擎

    • 模板引擎,可以把 模板结构 和 数据组合到一起,形成最终的html页面

在这里插入图片描述

art-tempalte模板引擎的使用步骤

  1. 加载 template-web.js
  2. 设置模板(就是我们前面写好的HTML页面)
    • 模板要使用script标签包裹
    • 指定script标签的type=“text/html"
    • 指定script标签的id=”值“
  3. 有数据了,然后调用 template函数,完成模板和数据的组合
    • 数据可以自己模拟,真实情况,数据一般都是ajax请求返回的数据
    • template函数
      • 参数1:模板的id
      • 参数2:要展示的数据,使用JS对象形式的数据
      • 返回值:模板和数据组合好的结果
  4. 把组合好的结果,放到页面中
  5. 最后,使用 {{title}} 这样的模板语法,指定数据展示的位置。

模板语法

  • 原样输出 - 适用于 直接显示标签的样式,而不是使用实体符合

    • {{@title}}
  • 直接输出

    • {{name}}
  • 条件判断

    {{if  条件}}
    xxx
    {{else}}
    yyy
    {{/if}}
    
  • 循环

    {{each hobby val key}}{{val}}  --- 表示数组的值{{key}}  --- 表示数组的下标
    {{/each}}
    

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248074.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PC办公必备软件

Everything &#xff1a;基于名称快速定位文件和文件夹https://www.voidtools.com/zh-cn/ Notepad &#xff1a; a free (as in "free speech" and also as in "free beer") source code editor and Notepad replacement that supports several languagesh…

Swift傻傻分不清楚系列(六)集合类型

本页包含内容&#xff1a; 集合的可变性&#xff08;Mutability of Collections&#xff09;数组&#xff08;Arrays&#xff09;集合&#xff08;Sets&#xff09;字典&#xff08;Dictionaries&#xff09; Swift 语言提供Arrays、Sets和Dictionaries三种基本的集合类型用来…

在.NET Core中使用DispatchProxy“实现”非公开的接口

原文地址&#xff1a;“Implementing” a non-public interface in .NET Core with DispatchProxy 原文作者&#xff1a;Filip W. 译文地址&#xff1a;https://www.cnblogs.com/lwqlun/p/11575686.html 译者&#xff1a;Lamond Lu 简介 反射是.NET中一个非常强大的概念&#x…

Ajax — 评论列表

<body style"padding: 15px;"><!-- 评论面板 --><div class"panel panel-primary"><div class"panel-heading"><h3 class"panel-title">发表评论</h3></div><form class"panel-bod…

VS2013秘钥

Visual Studio Ultimate 2013 KEY&#xff08;密钥&#xff09;&#xff1a;BWG7X-J98B3-W34RT-33B3R-JVYW9Visual Studio Premium 2013 KEY&#xff08;密钥&#xff09;&#xff1a;FBJVC-3CMTX-D8DVP-RTQCT-92494Visual Studio Professional 2013 KEY&#xff08;密钥&…

Swift傻傻分不清楚系列(七)控制流

本页包含内容&#xff1a; For-In 循环While 循环条件语句控制转移语句&#xff08;Control Transfer Statements&#xff09;提前退出检测 API 可用性 Swift提供了多种流程控制结构&#xff0c;包括可以多次执行任务的while循环&#xff0c;基于特定条件选择执行不同代码分支…

java课程之团队开发冲刺1.8

一.总结昨天进度 1.初步实现用户交互 增删课程表 二.遇到的困难 1.主界面一段程序一直报错 三.今天的任务 1.解决报错问题&#xff0c; 编写查询空教室功能 照片 燃尽图 转载于:https://www.cnblogs.com/qfsr/p/10873636.html

Ajax — 聊天机器人演示

<body><div class"wrap"><!-- 头部 Header 区域 --><div class"header"><h3>小思同学</h3><img src"img/person01.png" alt"icon" /></div><!-- 中间 聊天内容区域 --><div…

uni-app开发微信小程序的几天时间

人只有在不断的学习&#xff0c;才能不断的给自己充电&#xff0c;如果我们停止了学习&#xff0c;就像人没有了血脉&#xff0c;就会死亡&#xff0c;近来学习比较忙&#xff0c;压力比较大&#xff0c;整天面对着电脑&#xff0c;敲击代码&#xff0c;从中虽然收获了快乐&…

Swift傻傻分不清楚系列(八)函数

本页包含内容&#xff1a; 函数定义与调用&#xff08;Defining and Calling Functions&#xff09;函数参数与返回值&#xff08;Function Parameters and Return Values&#xff09;函数参数名称&#xff08;Function Parameter Names&#xff09;函数类型&#xff08;Funct…

Ajax — 第三天

Ajax-03 模板引擎原理 正则回顾 区分正则方法和字符串方法 正则方法 test()exec() 字符串方法 match()replace()split()search() 正则方法由正则表达式调用&#xff1b;字符串方法由字符串调用&#xff1b; exec方法 功能&#xff1a;使用正则表达式匹配字符串&#xff0c…

d3.js 共享交换平台demo

今天在群里遇到一张图 遂来玩一玩&#xff0c;先来上图!! 点击相应按钮&#xff0c;开关线路&#xff0c;此项目的重点是计算相应图形的位置&#xff0c;由于是个性化项目就没有封装布局。好了直接上代码。 <!DOCTYPE html> <html lang"en"> <head&g…

Java知识系统回顾整理01基础05控制流程07结束外部循环

一、break是结束当前循环 二、结束当前循环实例 break; 只能结束当前循环 public class HelloWorld { public static void main(String[] args) { //打印单数 for (int i 0; i < 10; i) { for (int j 0; j < 1…

Swift傻傻分不清楚系列(九)闭包

本页包含内容&#xff1a; 闭包表达式&#xff08;Closure Expressions&#xff09;尾随闭包&#xff08;Trailing Closures&#xff09;值捕获&#xff08;Capturing Values&#xff09;闭包是引用类型&#xff08;Closures Are Reference Types&#xff09;非逃逸闭包(Nones…

Ajax — 新闻列表

注意&#xff1a;本项目主要利用到了template&#xff0c;模板引擎进行编写 模板引擎代码下载地址 <div id"news-list"><!-- 这里放数据 --></div>.news-item {display: flex;border: 1px solid #eee;width: 700px;padding: 10px;margin-bottom: …

vim下更省心地用中文

在vim下使用中文是个麻烦。除了写代码&#xff0c;很多时候也需要做笔记。以下介绍rime输入法的一个功能&#xff0c;它可以减少vim下中文输入带来的麻烦。在***.custom.yaml下添加代码&#xff1a; "key_binder/bindings": - { when: always, accept: ReleaseEs…

Python 常见的内置模块

1. abs() 函数 描述 abs() 函数返回数字的绝对值 #!/usr/bin/pythonprint "abs(-45) : ", abs(-45) print "abs(100.12) : ", abs(100.12) print "abs(119L) : ", abs(119L)以上实例运行后输出结果为&#xff1a;abs(-45) : 45 abs(100.12) : …

Ajax — 第四天

数据交换格式 XML 写法&#xff1a; 一个文档有且只有一个根标签标签必须闭合属性值必须加引号 如果说服务器返回的数据是xml格式的 前端需要把服务器返回的xml当做document对象来处理目前无法演示&#xff0c;自己写接口的时候&#xff0c;我们可以测试一下。 JSON 写法…

检测字符串包含emoji表情

有时候在开发时会遇到不希望字符串中包含emoji表情的情况&#xff0c;Google之后发现了方法&#xff0c;但是似乎iOS9之后的emoji无法过滤&#xff0c;继续寻找方法&#xff0c;在一个NSString的扩展中发现了办法 #import <Foundation/Foundation.h>/**Category to searc…

数据库系统原理(第三章数据库设计 )

一、数据库设计概述 数据库的生命周期 数据库设计的目标&#xff1a; 满足应用功能需求&#xff08;存、取、删、改&#xff09;&#xff0c;良好的数 据库性能&#xff08;数据的高效率存取和空间的节省 共享性、完整性、一致性、安全保密性&#xff09;数据库设计的内容 数据…