

统一声明:
1.本站联系方式QQ:709466365 TG:@UXWNET 官方TG频道:@UXW_NET 如果有其他人通过本站链接联系您导致被骗,本站一律不负责! 2.需要付费搭建请联系站长QQ:709466365 TG:@UXWNET 3.免实名域名注册购买- 游侠云域名 4.免实名国外服务器购买- 游侠网云服务
从HTML结构写登录表单(输入框、按钮怎么摆得合理),到用JavaScript写Ajax请求(怎么把账号密码发给后端、怎么接收返回的结果),再到处理成功/失败的提示(比如登录成功跳首页、失败弹“账号密码错误”),每一步都有具体代码+直白解释——连“XMLHttpRequest对象怎么创建”“请求头要加什么”这种新手常卡的细节,都讲得明明白白。
不用怕跟不上,哪怕你刚学完HTML+CSS,跟着走10分钟就能做出一个“不刷新页面”的登录功能——做完不仅能学会Ajax的基础用法,还能搞懂“异步交互”到底是怎么回事。赶紧往下翻,一起把“纸上谈兵”变成“实际能用的小项目”!
你是不是刚学完HTML和CSS,想做个能真正“用起来”的登录页面?普通表单点提交就刷新整个页面,体验差得要命;想试试Ajax异步请求吧,又怕代码里的“XMLHttpRequest”“请求头”这些词听不懂?别慌,我去年帮隔壁学前端的小周做过这个——他当时连“异步”是什么都搞不清,跟着我这步骤走,1小时就把能跑的登录页面做出来了。今天我把这套“新手友好版”教程拆碎了讲,保证你看完就能上手,哪怕是第一次碰Ajax也不怕。
第一步:先搭好登录页面的“架子”——HTML+CSS要怎么写?
做登录页面的第一步,肯定是先把“看得见的部分”搭起来。我帮小周写的时候,他一开始犯了个低级错:把按钮放在form标签外面,结果点了没反应——你记住,所有输入项和提交按钮都要包在form里,不然数据根本传不出去。
先写HTML结构,文件名就叫login.html
:
这里要注意三点:
loginForm
——等下JS要通过这个id找到form,别乱改; name
属性要和id
一致(比如username
)——后端是通过name
拿数据的,我帮小周改的时候,他把name
写成user
,结果后端收不到用户名,折腾了半小时; type
是button
而不是submit
——如果用submit
,点了会触发form的默认刷新,我们要的是Ajax异步提交,所以得用button
。接下来用CSS美化,写在标签里:
#loginForm {
width: 320px;
margin: 100px auto;
padding: 20px;
border: 1px solid #eee;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
.input-group {
margin-bottom: 15px;
}
.input-group label {
display: block;
margin-bottom: 5px;
font-size: 14px;
color: #333;
}
.input-group input {
width: 100%;
height: 40px;
padding: 0 10px;
border: 1px solid #ddd;
border-radius: 4px;
box-sizing: border-box;
}
#submitBtn {
width: 100%;
height: 42px;
background-color: #007bff;
color: #fff;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 16px;
}
#submitBtn:hover {
background-color: #0056b3;
}
我帮小周写的时候,他一开始给input加了height: 30px
,结果输入的时候感觉“挤得慌”,后来改成40px就舒服多了——你可以根据自己的喜好调整,但输入框高度别低于35px,不然用户体验差。
第二步:核心的Ajax代码怎么写?分4步讲清楚
Ajax是整个登录功能的“心脏”,但新手不用怕——我把它拆成4个“普通人能听懂”的步骤,每一步都讲原理,保证你看完就会写。
简单说,Ajax就是“不用刷新页面,偷偷给后端发消息”的技术。比如你点登录按钮,Ajax会把用户名和密码“悄悄”发给后端,后端验证完再“悄悄”回复结果——整个过程页面不会动,体验比刷新好10倍。MDN文档里明确说过:“Ajax是改善用户体验的核心技术之一”(参考链接:https://developer.mozilla.org/zh-CN/docs/Web/Guide/AJAXnofollow)。
打开login.html
,在标签里写这些代码,我逐行给你讲:
第一步:创建“信使”——XMLHttpRequest对象
var xhr = new XMLHttpRequest();
这个xhr
就像你给朋友发消息的“快递员”,负责把你的数据送过去,再把后端的回复带回来。我帮小周写的时候,他问:“为什么要new这个对象?”我跟他说:“就像你寄快递得先找个快递员,不然你的东西怎么送出去?”
第二步:告诉“信使”——我要发什么消息?
xhr.open('POST', 'login.php', true);
这行代码是“初始化请求”,三个参数分别是:
POST
:请求方法,敏感数据一定要用POST(比如密码),因为GET会把密码暴露在URL里,不安全; login.php
:后端接口的地址(等下会教你写); true
:是否异步——选true就是“不用等后端回复,页面该干嘛干嘛”,这是Ajax的核心优势。第三步:给“信使”贴“标签”——告诉后端我发的是什么
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
这步超重要!你得告诉后端:“我发的是表单格式的数据”,不然后端根本没法解析。我帮小周做的时候,他忘了加这行,结果后端收到的数据是[object Object]
,根本读不出来——你可别漏了。
第四步:让“信使”出发——发送请求
先获取输入框里的内容:
var username = document.getElementById('username').value;
var password = document.getElementById('password').value;
var data = 'username=' + username + '&password=' + password;
然后发送:
xhr.send(data);
这里的data
格式要和form默认提交的一样(比如username=admin&password=123456
),不然后端收不到。我帮小周写的时候,他把data
写成{username: username, password: password}
,结果后端拿到的是“object”,后来改成字符串才好。
最后一步:等“信使”回来——处理后端的回复
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
var response = JSON.parse(xhr.responseText);
if (response.code === 1) {
alert('登录成功!');
window.location.href = 'index.html'; // 跳转到首页
} else {
alert(response.msg); // 弹出错误提示,比如“账号或密码错误”
}
}
};
这里要注意两个点:
readyState === 4
:表示请求完成(“信使”回来了); status === 200
:表示请求成功(后端没出错); JSON.parse()
:把后端返回的字符串转成JS对象——我帮小周做的时候,他忘了这步,结果response.code
一直是undefined
,后来加上就好了。我帮小周和3个新手做过这个, 了3个高频错误,你一定别犯:
type
用了submit
——导致点按钮就刷新页面,Ajax没机会运行; setRequestHeader
——后端收不到数据; JSON.parse()
——解析不了后端的回复。第三步:后端接口怎么写?用PHP做个“新手版”验证
很多新手卡在这里:“我没有后端知识,怎么测试Ajax?”别担心,用PHP写个最简单的接口,不用数据库,直接判断用户名和密码是不是admin
和123456
就行——5分钟就能写完。
新建login.php
文件,写这些内容:
<?php // 告诉前端:我返回的是JSON格式
header('Content-Type: application/json; charset=utf-8');
// 接收前端传过来的用户名和密码
$username = $_POST['username'];
$password = $_POST['password'];
// 简单验证(不用数据库,新手先这么玩)
if ($username === 'admin' && $password === '123456') {
// 登录成功,返回code=1
echo json_encode(array(
'code' => 1,
'msg' => '登录成功'
));
} else {
// 登录失败,返回code=0
echo json_encode(array(
'code' => 0,
'msg' => '账号或密码错误'
));
}
?>
这里要注意:
header('Content-Type: application/json; charset=utf-8')
——告诉前端返回的是JSON,不然前端解析会报错; json_encode()
:把PHP数组转成JSON字符串,前端才能用JSON.parse()
解析。你可能没听说过Postman——这是个测试接口的工具,免费又好用。下载安装后,按以下步骤测:
POST
方法,输入接口地址(比如http://localhost/login.php
); Body
→x-www-form-urlencoded
,添加两个参数:username
填admin
,password
填123456
; Send
,如果返回{"code":1,"msg":"登录成功"}
,说明接口没问题!我帮小周测的时候,他一开始把接口地址写成file:///login.php
,结果返回404——你要记得,PHP文件得放在服务器里(比如Apache、Nginx),用http://localhost
访问,不能直接双击打开。
第四步:最后一步——把所有代码连起来跑一遍
现在把login.html
和login.php
放在服务器的根目录(比如Apache的htdocs
文件夹),然后用浏览器打开http://localhost/login.html
:
admin
和123456
,点登录——会弹出“登录成功”,然后跳转到index.html
(你得自己建个首页); 要是遇到“跨域错误”(浏览器控制台显示Access-Control-Allow-Origin
),别慌!那是因为你用file://
协议打开前端文件,而后端是http://localhost
——解决办法很简单:把前端文件放到服务器里,用http://localhost/login.html
打开就行。我去年帮小周解决这个问题的时候,他折腾了半小时才找到原因,你要是碰到了,可以在评论区问我。
最后:给新手的2个“实战 ”
axios
,结果连“异步”都没搞清楚,后来还是回到原生Ajax,学会了再用框架,反而更快。你按这些步骤做完,要是遇到问题,比如“点击按钮没反应”“后端收不到数据”,可以在评论区告诉我——我帮过3个新手解决过这些问题,肯定能帮你搞定。赶紧去试试吧,做完你会发现:原来Ajax也没那么难!
为什么点击登录按钮没反应?
首先检查按钮的type属性是不是“button”——如果用了“submit”,会触发表单默认刷新,Ajax代码没机会运行;然后看表单里的输入项和按钮是不是都包在标签里,没包的话数据传不出去;还有JS里有没有给按钮绑定点击事件,比如有没有用document.getElementById(‘submitBtn’).onclick来触发Ajax请求,这些地方漏了都会导致按钮点了没反应。
我帮小周做的时候他就犯过这个错,按钮type写成submit,结果点一下页面就刷新,后来改成button再加绑定事件,马上就好了。
后端为什么收不到我传的用户名和密码?
先看输入框的name属性是不是和id一致,比如用户名输入框id是“username”,name也得是“username”——后端是通过name拿数据的,不一致肯定收不到;然后检查Ajax代码里有没有加xhr.setRequestHeader(‘Content-Type’, ‘application/x-www-form-urlencoded’),这行是告诉后端“我发的是表单格式数据”,没加的话后端解析不了;还有请求方法是不是POST,用GET的话敏感数据会暴露,而且后端可能没处理GET请求的参数。
小周之前把name写成“user”,结果后端拿到的username是空的,改回一致后马上就收到了。
为什么会出现“跨域”错误?
跨域错误一般是因为前端页面和后端接口的“协议、域名、端口”不一致,比如你用file://协议直接打开本地的login.html(就是双击文件),而后端接口是http://localhost/login.php,这两个协议不一样就会跨域。
解决办法很简单:把前端文件放到服务器的根目录里(比如Apache的htdocs文件夹),然后用http://localhost/login.html打开页面,这样前端和后端都是http://协议,就不会跨域了。
怎么测试后端接口有没有问题?
用Postman工具就行,免费又好用。打开Postman后选POST方法,输入接口地址(比如http://localhost/login.php),然后点Body→x-www-form-urlencoded,添加username和password两个参数,比如填admin和123456,点Send如果返回{“code”:1,”msg”:”登录成功”},说明接口没问题;要是返回其他内容,比如500错误,就是后端代码写错了,比如没加header(‘Content-Type: application/json’)。
我帮新手测试的时候,基本都用这个方法,比直接改前端代码试快多了。
Ajax和普通表单提交有什么区别?
普通表单提交会刷新整个页面,比如你点登录后,页面会闪一下重新加载,体验不好;而Ajax是“异步”提交,不用刷新页面,悄悄把数据发给后端,后端回复后再局部更新页面(比如弹个提示框或者跳首页),用户感觉更丝滑。
比如你填错密码,普通表单会刷新页面再显示错误,Ajax直接弹个“账号密码错误”的提示,页面都不用动,这就是Ajax的优势。
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别!
站长QQ:709466365 站长邮箱:709466365@qq.com