AJAX:Asynchronous Javascript And XML(异步JavaScript和XML)
作用:可以使前端页面在发送请求时不刷新整个页面,实现局部刷新的效果。
异步:AJAX请求可以设置是否是异步的,当是异步请求时,多个AJAX请求之间不需要等待,是并发的。
XMLHttpRequest对象
创建:var xhr = new XMLHttpRequest();
基本代码
<script type="text/javascript">
window.onload = function () {
document.getElementById("btn").onclick = function () {
//1. 创建AJAX核心对象
var xhr = new XMLHttpRequest();
//2. 注册回调函数
xhr.onreadystatechange = function(){
if (this.readyState == 4) {
if (this.status == 200) {
document.getElementById("mydiv").innerHTML = this.responseText
}else{
alert(this.status)
}
}
}
//3. 开启通道
xhr.open("GET", "/ajax/ajaxrequest2", true)
//4. 发送请求
xhr.send()
}
}
</script>
AJAX的GET请求也是以url?key=value&key=value的形式提交数据
当发送POST请求时,需要对请求头进行设置,然后在send()中添加数据key=value&key=value进行提交。
基本代码
<script type="text/javascript">
window.onload = function () {
document.getElementById("btn").onclick = function () {
//1. 创建AJAX核心对象
var xhr = new XMLHttpRequest();
//2. 注册回调函数
xhr.onreadystatechange = function(){
if (this.readyState == 4) {
if (this.status == 200) {
document.getElementById("mydiv").innerHTML = this.responseText
}else{
alert(this.status)
}
}
}
//3. 开启通道
xhr.open("GET", "/ajax/ajaxrequest2", true)
//4. 发送请求
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
var username = document.getElementById("username").value;
var password = document.getElementById("password").value;
xhr.send("username="+username+"&password="+password)
xhr.send()
}
}
</script>
数据交换
后端除了返回基本的HTML格式的代码,还可以使用JSON或XML进行数据交换。
JSON:
前端可以使用var jsonObj = JSON.parse(jsonStr)将json字符串转化为json对象。
后端可以使用fastjson组件,将java对象转化成json格式的字符串。
List<Student> studentList = new ArrayList<>();
while (rs.next()) {
// 取出数据
String name = rs.getString("name");
int age = rs.getInt("age");
String addr = rs.getString("addr");
// 将以上数据封装成Student对象
Student s = new Student(name, age, addr);
// 将Student对象放到List集合
studentList.add(s);
}
// 将List集合转换成json字符串
jsonStr = JSON.toJSONString(studentList);
XML:
后端需要将相应格式设置为response.setContentType("text/xml;charset=UTF-8");
对Tomcat9及之前版本存在乱码问题,需要进行设置:
//响应乱码
response.setContentType("text/html;charset=UTF-8");
//POST请求乱码 request.setCharacterEncoding("UTF-8");
浙公网安备 33010602011771号