Ajax学习笔记第8天

news2024/11/26 10:42:37

放弃该放弃的是无奈,放弃不该放弃的是无能,不放弃该放弃的是无知,不放弃不该放弃的是执着!


1. 聊天室小案例

文件目录

045.png

初始mysql数据库

048.png

index.html

  • window.location.assign('url');

触发窗口加载并显示指定的 url的内容

当前页面会保存到会话历史中,即可以点击回退按钮回退到之前的页面

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  设置用户名:
  <input type="text" id="username">
  <input type="button" id="btn" value="进入聊天室">
  <script src="js/jquery.min.js"></script>
  <script>
    $('#btn').click(function ()
    {
      $.post("login.php", {
        "username": $('#username').val()
        // data:login.php返回的数据【回调函数】
      }, function (data)
      {
        if (data === '1') {
          // 触发窗口加载并显示指定的 url的内容
          // 当前页面会保存到会话历史中,即可以点击回退按钮回退到之前的页面
          window.location.assign('room.php');
          // window.location = "room.php";
        } else {
          alert('请输入用户名')
        }
      }
      );
    });
  </script>
</body>

</html>

login.php

  • session_start();

开启session会话

  • preg_match("/^[\\s]*$/",$m)—空字符串的正则

正则校验–匹配$m是否是非空字符串

  • exit();

exit() 函数输出一条消息,并退出当前php脚本。

<?php
// 开启session会话
session_start();
$username = $_POST['username'];
  // 正则校验--匹配$username是否是非空字符串
if (preg_match("/^[\\s]*$/",$username)) {
  // 如果是 空字符【没有输入用户名】
  echo "0";
  // exit() 函数输出一条消息,并退出当前php脚本。
  exit();
}
// 赋值
$_SESSION['username'] = $username;
echo "1";
?>

room.php

  • overflow-x: hidden;

将左右两边的溢出的内容隐藏掉

  • .info:nth-child(2n)

括号内写2n就是选中info父元素的所有子元素偶数项

  • 实现Web端即时通讯的方法:

实现即时通讯主要有四种方式,它们分别是轮询、长轮询(comet)、长连接(SSE)、WebSocket。

它们大体可以分为两类,

一种是在HTTP基础上实现的,包括短轮询、comet和SSE;

另一种不是在HTTP基础上实现是,即WebSocket。

<?php
  session_start();
?>

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
  .container {
    width: 800px;
    height: 500px;
    border: 1px solid #ccc;
    padding: 10px;
    border-radius: 4px;
    /* 将左右两边的溢出的内容隐藏掉 */
    overflow-x: hidden;
    background-color: rgb(200, 215, 236);
  }

  .info {
    background: #eee;
    line-height: 24px;
    padding: 5px;
    margin: 3px 0;
  }

  /* 括号内写2n就是选中info父元素的所有子元素偶数项 */
  .info:nth-child(2n) {
    background: #fff;
  }

  .sub {
    width: 800px;
    margin-top: 10px;
  }

  .sub #info {
    border-color: #ccc;
    width: 800px;
    padding: 0 10px;
    height: 30px;
    border-radius: 4px;
    font-size: 20px;
    color: orangered;
  }
  </style>
</head>

<body>
  <h1><?php echo $_SESSION["username"]; ?>你好,欢迎来到聊天室!</h1>
  <div class="container">
    <div class="info">
      获取信息中...
    </div>
  </div>

  <div class="sub">
  <input type="text" id="info" placeholder="请输入消息后按回车键发送">
  </div>
  <script src="js/jquery.min.js"></script>
  <script>
  // 长轮询的请求,请求的是数据库中的信息【在服务端hold一段时间】
  // 读取数据
  setInterval(function() {
    // 读取数据 返回mysql存着的聊天数据
    $.get("read.php", function(data) {
      $(".container").html("");
      console.log(data);
      for (let i = 0; i < data.result.length; i++) {
        const o = data.result[i];
        // append() 方法在被选元素的结尾插入内容(仍然在该元素的内部)。
        $(".container").append("<div class='info'>" + o.username + "说:" + o.content + "</div>")
      }
    })
  }, 1000);

  // 发送消息
  // 当键盘键被按下时,设置 
  $("#info").keydown(function(e) {
    // 如果按下的按键是13,即回车键
    if (e.keyCode === 13) {
      // 如果按下的按键是回车键,那么重新渲染页面
      if ($("#info").val()) {
        //如果input框输入的值非空,进入判断体 
        //  发送请求【将聊天的内容传递给render.php】
        $.post("render.php", {
          "content": $("#info").val()
        },function(data){
          // "result":"error"
          console.log(data);
          // 清空输入框
          $("#info").val("")
        })
      }
    }
  })

  </script>
</body>

</html>

render.php

<?php
// 开启会话
  session_start();
  //获取信息
  $username = $_SESSION['username'];
  $content = $_POST['content'];
  // 多添加的
  header('Content-type: application/json');

  // 链接数据库
  $connet = mysql_connect("localhost","root","xjf123456");
  // 选择数据库
  mysql_select_db("ikungg");
  // 设置字符串
  mysql_query("SET NAMES UTF8MB4");
  // 插入sql
  $sql = "INSERT INTO liaotianshi (username,content) VALUES ('{$username}','{$content}')";

  $result = mysql_query($sql);
  if($result == 1) {
    echo '{"result":"success"}';
  }else{
    echo '{"result":"error"}';
  }
  // 关闭服务器
  mysql_close();
?>

read.php

  • 1 :php输出Resource id #3,这个结果表示的是输出一个记录集合
$result = mysql_query($sql);
echo $result;
  // 有截图42

042.png

  • 2 :php输出Resource id #3,这个结果表示的是输出一个记录集合
// 总结果存放到一个数组中
$arr = array("result"=>array());
print_r($arr);
print_r($arr['result']); //空数组
// 有截图44

044.png

<?php
  // 返回的数据格式是josn
  header('Content-type: application/json');
  // 链接数据库
  $connet = mysql_connect("localhost","root","xjf123456");
  // 选择数据库
  mysql_select_db("ikungg");
  // 设置字符串
  mysql_query("SET NAMES UTF8MB4");
  // 查询sql
  $sql = "SELECT * FROM liaotianshi";

  $result = mysql_query($sql);
  // echo $result;
  // php输出Resource id #3,这个结果表示的是输出一个记录集合
  // 有截图42

    // 总结果存放到一个数组中
    $arr = array("result"=>array());
    // print_r($arr);
    // print_r($arr['result']); //空数组
    // 有截图44
    // $arr = array();
    // print_r($arr);

    // mysqli_fetch_array() 函数从结果集中取得一行作为关联数组,或数字数组
    // 返回的是记录集,所以我们将数据放到mysql_fetch_array中
    while($row = mysql_fetch_array ($result)){
    // 向数组$arr['result']尾部添加$row
    array_push($arr['result'],$row);
    };
    //  echo $arr;
  // 固定写法,返回json格式
    $json = json_encode($arr);
    print_r($json); 
    // 关闭服务器
    mysql_close();
?>

效果展示1:

046.gif

**效果展示2:**两个浏览器

047.gif

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

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

相关文章

TSINGSEE青犀特高压输电线可视化智能远程监测监控方案

一、背景需求分析 特高压输电线路周边地形复杂&#xff0c;纵横延伸几十甚至几百千米&#xff0c;并且受所处地理环境和气候影响很大。传统输电线路检查主要依靠维护人员周期性巡视&#xff0c;缺乏一定的时效性&#xff0c;在巡视周期的真空期也不能及时掌握线路走廊外力变化…

AQS面试题总结

一&#xff1a;线程等待唤醒的实现方法 方式一&#xff1a;使用Object中的wait()方法让线程等待&#xff0c;使用Object中的notify()方法唤醒线程 必须都在synchronized同步代码块内使用&#xff0c;调用wait&#xff0c;notify是锁定的对象&#xff1b; notify必须在wait后执…

振弦式传感器读数模块VM5系列介绍

VM5系列是专门针对单线圈式振弦传感器研发&#xff0c;可完成传感器的线圈激励、频率读数、温度测量等工作&#xff0c;具有标准的 UART&#xff08;TTL/RS232/RS485&#xff09;和 IIC 数字接口、模拟量输出接口&#xff08;电压或电流&#xff09;&#xff0c;通过数字接口数…

【论文阅读笔记】GLM-130B: AN OPEN BILINGUAL PRE-TRAINEDMODEL

Glm-130b:开放式双语预训练模型 摘要 我们介绍了GLM-130B&#xff0c;一个具有1300亿个参数的双语(英语和汉语)预训练语言模型。这是一个至少与GPT-3(达芬奇)一样好的100b规模模型的开源尝试&#xff0c;并揭示了如何成功地对这种规模的模型进行预训练。在这一过程中&#xff0…

arcgis图上添加发光效果!

看完本文, 你可以不借助外部图片素材, 让你的图纸符号表达出你想要的光! 我们以之前的某个项目图纸为例,来介绍下让符号发光的技术! 第一步—底图整理 准备好栅格影像底图、行政边界的矢量数据,确保“数据合适、位置正确、边界吻合”。 确定好图纸的大小、出图比例、投…

食品企业数字孪生可视化管理平台,实现智慧轻工业高质量发展

如今&#xff0c;数字技术正在打破传统食品产业的边界&#xff0c;随着食品加工产业链不断进化为智慧体&#xff0c;数字孪生技术已经成了食品行业数字进阶的重要抓手。食品加工数字孪生工厂&#xff0c;通过应用数字孪生技术&#xff0c;将食品加工工厂的自动化生产线全过程进…

浏览器哪家强——PC端篇

今天的分享将围绕一个大家再熟悉不过的名称展开——浏览器。 根据百科给出的解释&#xff1a;浏览器是用来检索、展示以及传递Web信息资源的应用程序。通俗的说&#xff0c;浏览器就是一种阅读工具&#xff0c;类似记事本、word、wps&#xff0c;只不过后者阅读的是文本文档&am…

Linux0.11内核源码解析-malloc

malloc介绍 Linux内核版本0.11中的malloc.c文件实现了内存分配的功能。在这个版本的Linux内核中&#xff0c;malloc.c文件包含了内核级别的内存分配函数&#xff0c;用于分配和释放内核中的内存。这些函数可以帮助内核管理可用的内存&#xff0c;并允许内核动态地分配和释放内…

ajax-axios发送 get请求 或者 发送post请求带有请求体参数

/* axios v0.21.1 | (c) 2020 by Matt Zabriskie */ !function(e,t){"object"typeof exports&&"object"typeof module?module.exportst():"function"typeof define&&define.amd?define([],t):"object"typeof export…

记一次大数据事故@用了很久的虚拟机环境突然不能联网了

记一次大数据事故用了很久的虚拟机环境突然不能联网了 背景 今天打开自己电脑上的虚拟机环境打算练习一下flink&#xff0c;结果发现vmware里虚拟机能正常开机&#xff0c;也能正常进图os&#xff0c;但是就是不能ping通主机&#xff0c;主机也不能ping通虚拟机 探查 1、…

绝缘检测原理和绝缘电阻计算方法

文章目录 简介绝缘检测功能绝缘检测原理绝缘电阻检测的常用方法不平衡电桥法 绝缘电阻绝缘电阻的计算 绝缘检测开启或关闭为什么根据 V1 &#xff1c; V2 或 V1 ≥ V2 判断是上桥臂并入电阻还是下桥臂并入电阻 简介 绝缘检测是判断动力&#xff08;正、负&#xff09;总线与外…

Maven本地配置获取nexus私服的依赖

场景 Nexus-在项目中使用Maven私服&#xff0c;Deploy到私服、上传第三方jar包、在项目中使用私服jar包&#xff1a; Nexus-在项目中使用Maven私服&#xff0c;Deploy到私服、上传第三方jar包、在项目中使用私服jar包_nexus maven-releases 允许deploy-CSDN博客 在上面讲的是…

【6】c++11新特性(稳定性和兼容性)—>Lambda表达式

基本用法 lambda表达式是c最重要也是最常用的特性之一&#xff0c;这是现代编程语言的一个特点&#xff0c;lambda表达式有如下的一些优点&#xff1a; &#xff08;1&#xff09;声明式的编成风格&#xff1a;就地匿名定义目标函数活着函数对象&#xff0c;不需要额外写一个命…

Ubuntu20.04安装CUDA、cuDNN、tensorflow2可行流程(症状:tensorflow2在RTX3090上运行卡住)

最近发现我之前在2080ti上运行好好的代码&#xff0c;结果在3090上运行会卡住很久&#xff0c;而且模型预测结果完全乱掉&#xff0c;于是被迫研究了一天怎么在Ubuntu20.04安装CUDA、cuDNN、tensorflow2。 1.安装CUDA&#xff08;包括CUDA驱动和CUDA toolkit&#xff0c;注意此…

【MySQL】MySQL的安装与配置环境变量(使其在控制台上使用)

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《MySQL》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&a…

删除文件要谨慎!如何在Linux中删除目录或文件

删除目录和文件是任何操作系统中最基本但最重要的功能之一。在Linux中,如果运行的是窗口环境,则可以使用文件管理器应用程序查找和删除文件。也许你是通过SSH远程登录的,或者你的Linux计算机没有安装GUI,或者你想对你要删除的内容有更多的控制权。与Linux中的任何东西一样,…

【微服务 Spring Cloud Alibaba】- Nacos 服务注册中心

目录 1. 什么是注册中心&#xff1f; 1.2 注册中心的作用 2. SpringBoot 整合 Nacos 实现服务注册中心 2.1 将服务注册到 Nacos 2.2 实现消费者 3. 服务列表各个参数的含义、作用以及应用场景 1. 什么是注册中心&#xff1f; 注册中心是微服务架构中的一个重要组件&…

NoSQL数据库以及架构介绍

文章目录 一. 什么是NoSQL&#xff1f;二. NoSQL分类三. NoSQL与关系数据库有什么区别四. NoSQL主要优势和缺点五. NoSQL体系框架 其它相关推荐&#xff1a; 系统架构之微服务架构 系统架构设计之微内核架构 鸿蒙操作系统架构 架构设计之大数据架构&#xff08;Lambda架构、Kap…

Selenium学习(Java + Edge)

Selenium /səˈliːniəm/ 1. 简介 ​ Selenium是一个用于Web应用程序自动化测试工具。Selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。支持的浏览器包括IE、Mozilla Firefox、Safari、Google Chrome、Opera、Edge等。 ​ 适用于自动化测试&#x…

Linux期末复习——文件I/O编程

Linux系统调用以及用户编程接口 三者关系 系统调用、API以及系统命令之间关系&#xff1a; 什么是文件描述符&#xff1f; 是一个非负整数&#xff0c;索引值 打开或者创建一个文件的时候&#xff0c;内核会向进程返回一个文件描述符 读写文件时&#xff0c;会向函数传递一个文…