文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

利用Ajax实现智能回答的机器人示例代码

2022-12-24 18:00

关注

下图是效果(文章末尾有所有的源代码) 

一、实现人机交互步骤:

 获取dom元素,创建点击事件/键盘事件 将我说的话传进ajax服务器中,获取机器人说的话,then()中的数据找到 创建子节点追加并且渲染数据出来 每次说完了都滚动到对话框最下面来

① 获取dom元素,创建点击事件/键盘事件

    const btn = document.querySelector('#btnSend')
    const ipt = document.querySelector('#ipt')
    ipt.addEventListener('keyup', function (e) {
      if (e.key === 'Enter') {
        btn.click()
      }
    })
    btn.addEventListener('click', () => {
      const val = ipt.value.trim()
      console.log(val);

②将我说的话传进ajax服务器中

 axios.get('http://ajax-api.itheima.net/api/robot',{ params: { spoken: val}}).then(res => {
        console.log(res);//res本质是服务器响应的值
        console.log(res.data.data.info.text);
        const words = res.data.data.info.text

这是服务器响应数据返回的值所在的位置(res.data.data.info.text)

  ③创建子节点追加并且渲染数据出来

 li.className = 'left_word'
        document.querySelector('#talk_list').appendChild(li)
        li.innerHTML = `<img src="lib/img/person01.png" /> <span>${words}</span></li>`

④ 每次说完了都滚动到对话框最下面来

        document.querySelector('ul').scrollTop = document.querySelector('ul').scrollHeight

以上这是传入Ajax发送的数据渲染,我们发的val同理渲染

      // 自己发的
      const li = document.createElement('li')
      li.className = 'right_word'
      document.querySelector('#talk_list').appendChild(li)
      li.innerHTML = `<img src="lib/img/person02.png" /> <span>${val}</span></li>`
      ipt.value=''
      // 滚动到页面最下面
      document.querySelector('ul').scrollTop = document.querySelector('ul').scrollHeight

此时再进行校验下:

 二、以上的源码(图片素材不方便传,自己随便定义啦~)

<!DOCTYPE html>
<html lang="en">
 
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <meta http-equiv="X-UA-Compatible" content="ie=edge" />
  <title>案例_问答机器人</title>
  <link rel="stylesheet" href="https://unpkg.com/reset.css@2.0.2/reset.css" rel="external nofollow"  />
  <style>
    body {
      margin: 0;
      font-family: 'Microsoft YaHei', sans-serif;
    }
 
    .wrap {
      position: absolute;
      width: 100%;
      height: 100%;
      overflow: hidden;
    }
 
    .header {
      height: 55px;
      background: linear-gradient(90deg, rgba(246, 60, 47, 0.6), rgba(128, 58, 242, 0.6));
      overflow: hidden;
    }
 
    .header h3 {
      color: #faf3fc;
      line-height: 55px;
      font-weight: normal;
      float: left;
      letter-spacing: 2px;
      margin-left: 25px;
      font-size: 18px;
      text-shadow: 0px 0px 5px #944846;
    }
 
    .header img {
      float: right;
      margin: 7px 25px 0 0;
      border-radius: 20px;
      box-shadow: 0 0 5px #f7f2fe;
    }
 
    .main {
      position: absolute;
      left: 0;
      right: 0;
      top: 55px;
      bottom: 55px;
      background-color: #f4f3f3;
      box-sizing: border-box;
      overflow: hidden;
    }
 
    .talk_list {
      width: 100%;
      height: 100%;
      overflow-y: auto;
    }
 
    .talk_list li {
      overflow: hidden;
      margin: 20px 0px 30px;
      display: flex;
    }
 
    .talk_list .left_word {
      justify-content: flex-start;
    }
 
    .talk_list .left_word img {
      margin-left: 20px;
      width: 44px;
      height: 44px;
    }
 
    .talk_list .left_word span {
      background-color: #fe9697;
      padding: 10px 15px;
      border-radius: 12px;
      font-size: 16px;
      color: #fff;
      margin-left: 15px;
      margin-right: 20px;
      position: relative;
      line-height: 24px;
    }
 
    .talk_list .left_word span:before {
      content: '';
      position: absolute;
      left: -8px;
      top: 12px;
      width: 13px;
      height: 12px;
      background: url('../day01/lib/img/corner01.png') no-repeat;
    }
 
    .talk_list .right_word {
      justify-content: flex-end;
    }
 
    .talk_list .right_word img {
      margin-right: 20px;
      width: 44px;
      height: 44px;
    }
 
    .talk_list .right_word span {
      background-color: #fff;
      padding: 10px 15px;
      border-radius: 12px;
      font-size: 16px;
      color: #000;
      margin-right: 15px;
      margin-left: 20px;
      position: relative;
      line-height: 24px;
    }
 
    .talk_list .right_word span:before {
      content: '';
      position: absolute;
      right: -8px;
      top: 12px;
      width: 13px;
      height: 12px;
      background: url('../day01/lib/img/corner02.png') no-repeat;
    }
 
    .footer {
      width: 100%;
      height: 55px;
      left: 0px;
      bottom: 0px;
      background-color: #fff;
      position: absolute;
      display: flex;
      align-items: center;
      padding: 0 10px;
      box-sizing: border-box;
    }
 
    .input_txt {
      height: 37px;
      border: 0px;
      background-color: #f4f3f3;
      border-radius: 8px;
      padding: 0px;
      margin: 0 10px;
      outline: none;
      text-indent: 15px;
      flex: 1;
    }
 
    .input_sub {
      width: 70px;
      height: 37px;
      border: 0px;
      background-color: #fe9697;
      margin: 0;
      border-radius: 8px;
      padding: 0px;
      outline: none;
      color: #fff;
      cursor: pointer;
    }
  </style>
 
</head>
 
<body>
  <div class="wrap">
    <!-- 头部 Header 区域 -->
    <div class="header">
      <h3>小思同学</h3>
      <img src="lib/img/person01.png" alt="icon" />
    </div>
    <!-- 中间 聊天内容区域 -->
    <div class="main">
      <ul class="talk_list" style="top: 0px;" id="talk_list">
        <!-- 机器人 -->
 
        <!-- 我 -->
      </ul>
    </div>
    <!-- 底部 消息编辑区域 -->
    <div class="footer">
      <img src="lib/img/person02.png" alt="icon" />
      <input type="text" placeholder="说的什么吧..." class="input_txt" id="ipt" />
      <input type="button" value="发 送" class="input_sub" id="btnSend" />
    </div>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/axios@0.27.2/dist/axios.min.js"></script>
  <script>
 
    
 
    const btn = document.querySelector('#btnSend')
    const ipt = document.querySelector('#ipt')
    ipt.addEventListener('keyup', function (e) {
      if (e.key === 'Enter') {
        btn.click()
      }
    })
    btn.addEventListener('click', () => {
      const val = ipt.value.trim()
      console.log(val);
      axios.get('http://ajax-api.itheima.net/api/robot',{ params: { spoken: val}}).then(res => {
        console.log(res);//res本质是服务器响应的值
        console.log(res.data.data.info.text);
        const words = res.data.data.info.text
        const li = document.createElement('li')
        li.className = 'left_word'
        document.querySelector('#talk_list').appendChild(li)
        li.innerHTML = `<img src="lib/img/person01.png" /> <span>${words}</span></li>`
        // 滚动到页面最下面
        document.querySelector('ul').scrollTop = document.querySelector('ul').scrollHeight
      })
 
      // 自己发的
      const li = document.createElement('li')
      li.className = 'right_word'
      document.querySelector('#talk_list').appendChild(li)
      li.innerHTML = `<img src="lib/img/person02.png" /> <span>${val}</span></li>`
      ipt.value=''
      // 滚动到页面最下面
      document.querySelector('ul').scrollTop = document.querySelector('ul').scrollHeight
 
    })
  </script>
</body>
 
</html>

到此这篇关于利用Ajax实现智能回答的机器人的文章就介绍到这了,更多相关Ajax机器人内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯