一:基础知识点
一、Ajax知识回顾
1.Ajax是英文 Asynchronous JavaScript and XML,异步的javascript和xml的简称;
2.主要用于不刷新或页面跳转的情况下,发送另一个http请求,动态更新当前页面中的数据,
使用户始终停留在当前页面,提升用户体验;
3.js原生提供一个对象: XMLHttpRequest()可以完成Ajax的所有操作,但操作很繁琐,且容易出错;
4.jQuery将常用的Ajax操作进行的封装,提供一套简单的接口,来简化用户的Ajax请求;
5.Ajax主要涉及二类http请求: GET 和 POST ,GET用于从服务器获取数据,POST用于向服务器发送数据;
5.原生的Ajax请求,请大家参考前面的课程,这套课程主要是讲述jQuery中的Ajax请求是如何实现的。
----------------------------------------------------------------------------------------
二、load()方法
1.这是jQuery中最简单的Ajax请求方法,默认为GET请求方式;
2.语法: load(url[,data,callback]),load(请求的url地址,请求数据,请求成功后回调函数);
(1).url: 请求的服务器上的资源的url地址,可以是一个txt,html,php....
(2).data:
[1]. GET请求: 无参数或是名值对格式字符串;
[2]. POST请求: 对象或数组;
(3).function(data,statuStr,xhr), function(响应文本,状态字符串(success),xhr对象)
3.调用: 该方法需要在jQuery对象上调用,回调适用于jQuery集合中每一个元素,例如: $('#box').load(...);
4.优势:
(1).自动参数自动判断请求类型是GET还是POST;
(2).可直接将load()返回值做为DOM元素内容自动插入,省去了append()等DOM操作
5.返回: 响应的内容;
-----------------------------------------------------------------------------------------
三、$.get()函数
1.$.get(),用于从服务器上读取内容
2.语法:$.get(url[,data][,callback][,dataType])
3.url: 服务器上的url地址,为空表示当前地址;
4.data:
(1).查询字符串格式: name=peter&age=88;
(2).对象字面量: {name:'peter',age:88},自动序列化为上面的查询字符串;
5.callback: 请求成功的回调函数,function(响应文本,状态字符串,xhr对象),如果不需要回调,可设为null;
6.dataType: 响应内容类型/应答消息体, html/text/xml/json/script/jsonp;
7.返回值: 返回xhr对象
-----------------------------------------------------------------------------------------
四、$.getJSON()函数
1. $.getJSON()专用于解析从服务器上返回的json格式的内容;
2. 其实它就是$.get()函数中,将返回数据类型dataType设置为'json'格式时的简写函数;
3. $.getJSON()需要读取json格式的数据,为简化起见,我直接创建了一个json文件,实际开发中应该从接口获取;
-----------------------------------------------------------------------------------------
五、$.getScript()函数
1. $.getScript()用于动态加载外部的javascript脚本文件;
2. $.getScript(脚本地址,成功回调);
3. 可以任何位置加载外部脚本
-----------------------------------------------------------------------------------------
六、$.post()函数
1. $.post()用于向服务器发送大量的,敏感的信息(信息在消息体中而非url地址中)
2. $.post(url[,data][,callback][,dataType]),参数与$.get()相同
3. url: http请求的url处理程序;
4. data: 消息体中的数据,以查询字符串或对象字面量形式提供;
5. callback: 成功后的回调方法,function(data,status,xhr){...};
6. dataType: 期望服务器端响应返回的数据格式,如html,json,text,xml,_default...
------------------------------------------------------------------------------------------
七、$.ajax()函数
1.学完前面的知识,$.ajax()就显得非常简单了;
2.load(),$.get(),$.getJSON(),$.getScript(),$.post()其实都是$.ajax()快捷方式罢了;
3.$.ajax()的参数是一个对象,键名对应的属性非常多,并且键名不允许自定义,很多之前我们已经学过了;
4.尽管参数很多,但实际开发中,经常用到的并不多,大家不必太纠结,有的参数用到了再查手册也不迟;
5.常用属性:
(1). url : 请求的url资源地址;
(2). type: 请求的类型,get / post;
(3). data: 发送的参数;
(4). dataType: 响应的数据类型;
(5). success: 响应成功的回调方法;
6.该方法是jQuery中Ajax的底层实现,前面的方法或函数其实都在它基础实现的功能封装;
下面我们将$.post()中的登录验证功能,使用$.ajax()进行改写
------------------------------------------------------------------------------------------
二.具体实例
1. load --post请求 实例 detail.php, school.php服务器文件
一.html请求文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>load()方法</title>
</head>
<body>
<h3>江湖门派查询系统load()</h3>
<label for="school">请选择:</label>
<select name="school" id="school"></select>
<p id="detail"></p>
<script src="../lib/jquery.js"></script>
<script>
$('#school') // 获取下拉列表
.load('inc/school.php') //从服务器获取数据
.change(function (event) {
$('#detail').load(
//事件处理的脚本
'inc/detail.php',
// 发送到服务器上的数据
{key: $(event.target).val()},
// 成功后的回调处理方法
function () {
// console.log($(event.target).val())
$('[value=""]').remove();
}
);
})
</script>
</body>
</html>
二.school.php
<?php
$schools = ['丐帮', '古墓派', '峨眉派'];
//echo json_encode($schools);die;
$option = '<option value="">请选择</option>';
foreach ($schools as $key => $value) {
$option .= "<option value='{$key}'>{$value}</option>";
}
echo $option;
三.detail.php
<?php
$detail = [
0=>'<img src="inc/images/1.jpg" width="200px"><h3>帮主:黄蓉,绝招:《打狗棒法》</h3>' ,
1=>'<img src="inc/images/2.jpg" width="200px"><h3>帮主:小龙女,绝招:《玉女剑法》</h3>' ,
2=>'<img src="inc/images/3.jpg" width="200px"><h3>帮主:周芷若,绝招:《九阴真经》</h3>' ,
3=>'<img src="inc/images/4.jpg" width="200px"><h3>帮主:严晓明,绝招: 逃跑</h3>' ,
];
//$_POST['key']: 返回键名
echo $detail[$_POST['key']];
// echo $detail[$_GET['key']];点击 "运行实例" 按钮查看在线实例
2.get请求
1.提交请求
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>$.get()函数</title>
</head>
<body>
<h3>江湖门派查询系统$.get()</h3>
<label for="school">请选择:</label>
<select name="school" id="school"></select>
<p id="detail"></p>
<script src="../lib/jquery.js"></script>
<script>
$.get('inc/school.php',function (data, status, xhr) {
// console.log(data);
// console.log(status);
// console.log(xhr);
if (status === 'success') {
// $('#school').html(data);
$(data).appendTo('#school');
}
});
$('#school').change(function (event) {
// console.log($(this).serialize());
$.get(
//请求的Url地址
'inc/detail.php',
//请求数据
{key: $(event.target).val()},
//请求成功的回调
function (data, status) {
if (status === 'success') {
$('#detail').html(data);
$('[value=""]').remove();
} else {
$('#detail').html('<span style="color:red">请求失败</span>');
}
}
);
})
</script>
</body>
</html>
2.shool.php
<?php
$schools = ['丐帮', '古墓派', '峨眉派'];
//echo json_encode($schools);die;
$option = '<option value="">请选择</option>';
foreach ($schools as $key => $value) {
$option .= "<option value='{$key}'>{$value}</option>";
}
echo $option;
3.detail.php
<?php
$detail = [
0=>'<img src="inc/images/1.jpg" width="200px"><h3>帮主:黄蓉,绝招:《打狗棒法》</h3>' ,
1=>'<img src="inc/images/2.jpg" width="200px"><h3>帮主:小龙女,绝招:《玉女剑法》</h3>' ,
2=>'<img src="inc/images/3.jpg" width="200px"><h3>帮主:周芷若,绝招:《九阴真经》</h3>' ,
3=>'<img src="inc/images/4.jpg" width="200px"><h3>帮主:严晓明,绝招: 逃跑</h3>' ,
];
//$_POST['key']: 返回键名
// echo $detail[$_POST['key']];
echo $detail[$_GET['key']];点击 "运行实例" 按钮查看在线实例
3.getjson案例
1.请求页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>$.getJSON()函数</title>
</head>
<body>
<h3>江湖门派查询系统$.getJSON()</h3>
<label for="school">请选择:</label>
<select name="school" id="school"></select>
<p id="detail"></p>
<script src="../lib/jquery.js"></script>
<script>
// 1. $.getJSON()专用于解析从服务器上返回的json格式的内容;
// 2. 其实它就是$.get()函数中,将返回数据类型dataType设置为'json'格式时的简写函数;
// 3. $.getJSON()需要读取json格式的数据,为简化起见,我直接创建了一个json文件,实际开发中应该从接口获取;
$.getJSON('inc/schools.json',function (data, status) {
if (status === 'success') {
//默认的显示内容
let option = '<option value="">请选择</option>';
// console.log(data);
$.each(data, function(i){// $.each()专用来遍历对象或数组的全局函数
console.log(data[i]);
option += '<option value="'+i+'">'+data[i]+'</option>';
});
console.log(option);
// 将拼装好的html代码添加到<select>中
$('#school').html(option);
}
});
$('#school').change(function (event) {
// console.log($(this).serialize());
$.get(
//请求的Url地址
'inc/detail.php',
//请求数据
{key: $(event.target).val()},
//请求成功的回调
function (data, status) {
if (status === 'success') {
$('#detail').html(data);
$('[value=""]').remove();
} else {
$('#detail').html('<span style="color:red">请求失败</span>');
}
}
);
})
</script>
</body>
</html>
2.schools.json
["丐帮", "古墓派", "峨眉派"]点击 "运行实例" 按钮查看在线实例
4.getScript实例
1.提交页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script src="../lib/jquery.js"></script>
<script>
// 在页面中使用js运用的创建一个按钮
$.getScript('inc/demo.js',function () {
// 将按钮设置为淡出
// $('button').fadeOut(3000);
$('button').fadeTo(3000,0.3);
});
</script>
</body>
</html>
2.demo.js页面
$('<button></button>')
.html('动态加载脚本')
.width(150)
.height(150)
.css('background-color','yellow')
.appendTo('body');点击 "运行实例" 按钮查看在线实例
5.post在验证
1.提交界面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>$.post()</title>
</head>
<body>
<h3>用户登录$.post()</h3>
<p>
<label for="email">邮箱:</label>
<input type="email" id="email" name="email">
</p>
<p>
<label for="password">密码:</label>
<input type="password" id="password" name="password">
</p>
<p><button>提交</button></p>
<script src="../lib/jquery.js"></script>
<script>
$('button').click(function () {
//邮箱的非空验证
if ($('#email').val().length === 0) {
$('#email').after('<span style="color:red">邮箱不能为空</span>')
.next().fadeOut(3000);
$('#email').focus(); // 设置焦点
return false;
}
//密码的非空验证
if ($('#password').val().length === 0) {
$('#password').after('<span style="color:red">密码不能为空</span>')
.next().fadeOut(3000);
$('#password').focus(); // 设置焦点
return false;
} else if ($('#password').val().length < 6) {
$('#password').after('<span style="color:red">密码长度不能少于6位</span>')
.next().fadeOut(3000);
$('#password').focus(); // 设置焦点
return false;
}
$.post(
//处理请求的脚本
'inc/check.php',
//要发送到服务器上的数据
{
email: $('#email').val(),
password: $('#password').val()
},
// 响应成功的回调
function (data) {
console.log(data);
if (data.status == 1) { // 验证通过
$('button')
.after('<span style="color:green"></span>')
.next() // 切换到span
.html(data.message) // 填充span内容
.fadeOut(2000);
} else {
$('button')
.after('<span style="color:red"></span>')
.next() // 切换到span
.html(data.message) // 填充span内容
.fadeOut(2000);
}
},
//响应数据的类型
'json'
);
});
</script>
</body>
</html>点击 "运行实例" 按钮查看在线实例
2.check.php
<?php
//echo json_encode('测试数据');
// 连接数据库并验证用户
$email = htmlspecialchars(trim($_POST['email']));
$password = sha1(htmlspecialchars(trim($_POST['password'])));
$pdo = new PDO('mysql:host=127.0.0.1;dbname=phpcn','root','root');
$sql = "SELECT COUNT(*) FROM `user` WHERE `email`=:email AND `password`=:password ";
$stmt = $pdo->prepare($sql);
$stmt->execute(['email'=>$email,'password'=>$password]);
if ($stmt->fetchColumn(0) == 1) {
$status = 1;
$message = '验证通过';
} else {
$status = 0;
$message = '邮箱或密码错误';
}
echo json_encode(['status'=>$status, 'message'=>$message]);点击 "运行实例" 按钮查看在线实例
6.ajax实例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>$.ajax()</title>
</head>
<body>
<h3>用户登录$.ajax()</h3>
<p>
<label for="email">邮箱:</label>
<input type="email" id="email" name="email">
</p>
<p>
<label for="password">密码:</label>
<input type="password" id="password" name="password">
</p>
<p><button>提交</button></p>
<script src="../lib/jquery.js"></script>
<script>
$('button').click(function () {
//邮箱的非空验证
if ($('#email').val().length === 0) {
$('#email').after('<span style="color:red">邮箱不能为空</span>')
.next().fadeOut(3000);
$('#email').focus(); // 设置焦点
return false;
}
//密码的非空验证
if ($('#password').val().length === 0) {
$('#password').after('<span style="color:red">密码不能为空</span>')
.next().fadeOut(3000);
$('#password').focus(); // 设置焦点
return false;
} else if ($('#password').val().length < 6) {
$('#password').after('<span style="color:red">密码长度不能少于6位</span>')
.next().fadeOut(3000);
$('#password').focus(); // 设置焦点
return false;
}
$.ajax({ // 参数必须是对象
type: 'post', // 请求类型
url: 'inc/check.php', // 请求的脚本
// data: 'email='+$('#email').val()+'&password='+$('#password').val(),
data: { // 请求数据
email: $('#email').val(),
password: $('#password').val()
},
dataType: 'json',
success: function (data) {
console.log(data);
if (data.status == 1) { // 验证通过
$('button')
.after('<span style="color:green"></span>')
.next() // 切换到span
.html(data.message) // 填充span内容
.fadeOut(2000);
} else {
$('button')
.after('<span style="color:red"></span>')
.next() // 切换到span
.html(data.message) // 填充span内容
.fadeOut(2000);
}
}
});
});
</script>
</body>
</html>点击 "运行实例" 按钮查看在线实例
7.
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号