入门Ajax (初级项目实践版)

安装

去node官网下载LTS,长期支持版本,傻瓜式安装
打开命令行

node -v

如果能出现版本号,即安装成功
如果不出现,再安装一次,可以考虑选择repair
备注:win7用户,需要自行配置环境变量


配置淘宝镜像

npm get registry

如果出现的网址,不是https://registry.npmmirror.com/
则需要改成淘宝镜像地址,命令如下:

 npm set registry https://registry.npmmirror.com/

新建项目

新建一个空文件夹,命名为英文即可

cd 文件夹名      ##切换目录
npm init -y     ##初始化
npm install jquery --save   ##安装一个jQuery包,并且记录在package.json文件里dependencies字段里
##or 简写成
npm i jquery

npm uninstall jquery --save  ##卸载jQuery包,并且删除dependencies里的jQuery字段
##or 简写成
npm uni jquery

入门Ajax

什么是Ajax?

AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步 JavascriptXML”。

第一步、

新建一个文件夹,命名为英文即可 (在这里我命名的是login-register)
在里面新建一个JS文件 (在这里我建了一个server.js)

第二步、

找到terminal控制台
先通过cd ..\切换至新建文件夹下
然后通过md views 回车 (通过md 新建文件夹名字 来新建文件夹)
这样就在login-register文件夹下新建了一个名为views的文件夹(当然也可以通过在login-register文件夹右键新建一个文件夹,两者一样)

第三步、

在控制台里面npm init -y
通过npm i express express-art-template来安装expressexpress-art-template两个包
此时的package.json应该是这样的

在这里插入图片描述

此时的文件夹是这样的

在这里插入图片描述

第四步、

sever.js中导入express模块

## node中使用cmd,也叫commonJs模块方式,用require导入
const  express=require('express')  // require('express')  导入express模块
const app = express()  

app.engine('html',require('express-art-template'))

特别插入========
前端数据交互技术:form表单提交和Ajax
form表单提交有:get、post
get和post是页面覆盖,从一个页面跳转到另一个页面
Ajax则是实现页面的局部变化,让用户拥有更好的体验

get的特点:
	1、要求浏览器发送请求时,请求参数数量不能超过4k
	2、要求浏览器发送请求时,必须在浏览器地址栏上将请求参数信息显示出来 (安全性差)
	3、要求浏览器发送请求时,必须将请求参数信息保存在http请求协议包中的请求头
	4、要求浏览器在接受到服务器返回的资源文件内容后,必须将资源文件内容保存在浏览器的缓存中
post的特点:
	1、要求浏览器发送请求时,可以携带任意数量的请求参数
	2、要求浏览器发送请求时,必须在浏览器地址栏上隐藏请求参数信息
	3、要求浏览器发送请求时,必须将请求参数信息保存在http请求协议包中的请求体
	4、禁止浏览器将服务器返回资源文件内容进行保存

=========================================================================================================


第五步、

views文件夹下新建两个html文件
两个html样式分别为

登录界面:

在这里插入图片描述

注册界面:
在这里插入图片描述

登录界面代码:

<!DOCTYPE html>
<html>
<head>
    <title>Login</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f4f4f4;
        }

        .container {
            max-width: 400px;
            margin: 0 auto;
            padding: 20px;
            background-color: #ffffff;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
        }

        h1 {
            text-align: center;
            margin-bottom: 20px;
        }

        .form-group {
            margin-bottom: 20px;
        }

        label {
            display: block;
            font-weight: bold;
            margin-bottom: 5px;
        }

        input[type="email"],
        input[type="password"] {
            width: 100%;
            padding: 10px;
            border: 1px solid #ccc;
            border-radius: 4px;
        }

        button {
            display: block;
            width: 100%;
            padding: 10px;
            background-color: #4caf50;
            color: #ffffff;
            border: none;
            border-radius: 4px;
            cursor: pointer;
        }

        button:hover {
            background-color: #45a049;
        }

        .text-center {
            text-align: center;
        }
    </style>
</head>
<body>
<div class="container">
    <h1>Login</h1>
    <form action="/login_onsumbit" method="get">
        <div class="form-group">
            <label for="email">Username:</label>
            <input type="email" id="email" name="email" required><!--//required第一要求必填,第二要求格式正确,否则不可submit(提交)-->

            <p id="emailTip"></p>
        </div>
        <div class="form-group">
            <label for="password">Password:</label>
            <input type="password" id="password" name="password" required><!--//required第一要求必填,第二要求格式正确,否则不可submit(提交)-->
        </div>
        <div class="text-center">
            <button type="submit">Login</button>
        </div>
    </form>
</div>
</body>
</html>

注册界面:

<!DOCTYPE html>
<html>
<head>
    <title>Register</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f4f4f4;
        }

        .container {
            max-width: 400px;
            margin: 0 auto;
            padding: 20px;
            background-color: #ffffff;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
        }

        h1 {
            text-align: center;
            margin-bottom: 20px;
        }

        .form-group {
            margin-bottom: 20px;
        }

        label {
            display: block;
            font-weight: bold;
            margin-bottom: 5px;
        }

        input[type="email"],
        input[type="password"] {
            width: 100%;
            padding: 10px;
            border: 1px solid #ccc;
            border-radius: 4px;
        }

        button {
            display: block;
            width: 100%;
            padding: 10px;
            background-color: #4caf50;
            color: #ffffff;
            border: none;
            border-radius: 4px;
            cursor: pointer;
        }

        button:hover {
            background-color: #45a049;
        }

        .text-center {
            text-align: center;
        }
        .form-group>p{
            color: red;
        }
    </style>
</head>
<body>
<div class="container">
    <h1>Register</h1>
    <form>
        <div class="form-group">
            <label for="email">Email:</label>
            <input type="email" id="email" name="email" required> <!--//required第一要求必填,第二要求格式正确,否则不可submit(提交)-->

            <p id="emailTip"></p>
        </div>
        <div class="form-group">
            <label for="password">Password:</label>
            <input type="password" id="password" name="password" required><!--//required第一要求必填,第二要求格式正确,否则不可submit(提交)-->

             <p id="passwordTip"></p>
        </div>
        <div class="form-group">
            <label for="password">Password:</label>
            <input type="password" id="passwordAgain" name="passwordAgain" required><!--//required第一要求必填,第二要求格式正确,否则不可submit(提交)-->
        </div>

        <div class="text-center">
            <button type="submit">Register</button>
        </div>
    </form>
</div>
</body>
</html>

第六步、

server.js内添加以下代码

app.get('/login.html',(req,res)=>{     
    res.render('login.html')
})

## 注意:下面代码内容一定要要放到最后,切记!切记!切记!
app.listen(8888,()=>{
    console.log('listen on port 8888')
})
代码作用
app.gethttp发出get请求
‘/login.html’URL
req浏览器发送给服务器的信息
res服务器发送给用户的反馈信息
res.render(‘login.html’)服务器响应http请求通过res.render去向模板中渲染数据,并将视图发送给客户端
res.send(‘123456789123456789123456789’)服务器响应http请求通过res.send直接将信息(这里是字符串)发送给客户端
app.listen该方法会返回一个http.Server对象
8888端口号 (数字范围须在0~65535)

第七步、

在控制台输入node server.js -----save
控制台会输出listen on port 8888 这时便是启动成功了!
去浏览器输入:localhost:8888/login.html

第八步、

1、在HTML写入内嵌式JavaScript

2、定义函数

	document.getElementsByTagName('form')[0].onsubmit=()=>{
        const xhr=new XMLHttpRequest()   //设置XMLHttpRequest对象
        xhr.open('GET',`/login_onsubmit`,true)    //通过get请求方式    URL   异步
        xhr.onreadystatechange=()=>{
            if (xhr.readyState===4&&xhr.status===200){
                if (xhr.responseText){      // 如果后端给前端的是true(不是这些:“”,'',0,undefined,null,false,NaN便是true)则执行下面
                    console.log(xhr.responseText) //输出后端发送给浏览器的信息
                }
            }
        }
        xhr.send() 

    }

3、在html的form中内容应为如下

<form action="/login_onsumbit" method="get">  <!--""内的内容需要与JavaScript内的URL和server.js中一致 --> 
    
 <input type="email" id="email" name="email" required> <!--required第一要求必填,第二要求格式正确,否则不可submit(提交)-->
    
  <input type="password" id="password" name="password" required><!--//required第一要求必填,第二要求格式正确,否则不可submit(提交)-->  

4、 在server.js中要写入如下内容

##登录界面(需要在浏览器输入:localhost:8888/login.html  回车即可跳转)
app.get('/login.html',(req,res)=>{
    res.render('login.html')
})
##注册界面(需要在浏览器输入:localhost:8888/register.html 回车即可跳转)
app.get('/register.html',(req,res)=>{  <!--""内的内容需要与JavaScript内的URL中一致 -->
    res.render('register.html')
})
##在输入框内输入相应的邮箱和密码(现在可以随便输入)点击login按钮从登录界面跳转到注册界面
app.get('/login_onsumbit',(req,res)=>{  <!--""内的内容需要与JavaScript内的URL中一致 --> 

    res.render('register.html')
    console.log('已经跳转到注册页面')
})


第九步、添加登录界面的账号格式验证与账号正确验证

1、设置变量和正则
	const  email=document.getElementById('email')
    const emaiilTip=document.getElementById('emailTip')
    const reg=/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/   ##定义验证邮箱的正则
2、定义函数
email.onchange=()=>{
        if(reg.test(email.value)){  ##如果用户输入的邮箱格式正确则执行下面

            const xhr=new XMLHttpRequest()     ##设置XMLHttpRequest对象
            const  params=`/test_loginemail?email=${email.value}` ## 定义(URL和发送email.value给后端)为一个确定值
            xhr.open('get',params,true)  
            xhr.onreadystatechange=()=>{
                if (xhr.readyState===4&&xhr.status===200){
                    console.log(xhr.responseText)
                    if (xhr.responseText){
                        emailTip.innerHTML=xhr.responseText  ##将后端发送回来的
                    }
                }
            }
            xhr.send()
            emaiilTip.innerHTML=''
            return true
        }else {
            emaiilTip.innerHTML='邮箱格式错误'
            return false
        }
    }
3、

server.js中加入以下内容

app.get('/test_loginemail',(req,res)=>{
     if(req.query.email==='123456789@qq.com'){  ##如果前端传来用户输入的数据为123456789@qq.com则表示不会显示什么,如果不是则会显示该账户未注册
         res.send('')
     }else {
        return  res.send('该账户未注册')
     }
 })

第十步、添加注册界面的一些验证(和前面登录界面异曲同工)

一、添加邮箱格式验证 和 账号是否注册验证
1、设置变量和正则
	const email=document.getElementById("email")
    const emailTip=document.getElementById('emailTip')
2、定义事件函数
email.onchange=()=>{
        const reg=/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/ ##正则表达式
        const str=email.value   ##获取用户输入到email里面的字符串
        if (reg.test(str)===true){   ##测试是否满足邮箱格式

            const xhr=new XMLHttpRequest()     ##设置XMLHttpRequest对象
            const  params=`/test_email?email=${email.value}` ## 定义(URL和发送email.value给后端)为一个确定值
            xhr.open('get',params,true)  ##通过URL并携带用户输入的信息以get方式传向后端 true为异步
            xhr.onreadystatechange=()=>{
                if (xhr.readyState===4&&xhr.status===200){
                    console.log(xhr.responseText)
                    if (xhr.responseText){
                        emailTip.innerHTML=xhr.responseText
                    }
                }
            }
            xhr.send()
            document.getElementById('emailTip').innerHTML=('')
            return true
        }else{
            document.getElementById('emailTip').innerHTML=('邮箱格式错误')##给form表单中的p标签添加字符串
            return false
        }

    }
3、

server.js中添加以下内容

app.get('/test_email',(req,res)=>{
    console.log(req.query)
    if(req.query.email==='123456789@qq.com'){
        res.send('账号已注册')
    }else {
        res.send(' ')
    }
})
二、添加二次密码输入异同验证(此处与后端无关)
定义方法
document.getElementsByTagName('form')[0].onsubmit=()=>{  ##点击form表单调用箭头函数
        const password=document.getElementById('password').value  ##获取第一个密码输入框内的数据
        const passwordAgain=document.getElementById('passwordAgain').value ##获取第二个输入框内的数据
        if (password===passwordAgain){  ##如果第一个数据与第二个数据一致
            return true  ##运行
        }
        document.getElementById('passwordTip').innerHTML=('两次密码不一样')
        return  false
    }

注:该项目为学习JavaScript的Ajax的初入门者,未添加太多功能,以防造成初学者知识混乱。此项目经供参考

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值