AJAX(跨域AJAX尚未整理)
文章目录
Tips
可以参考W3School
-
Asynchronous Javascript And XML:异步 JavaScript 和 XML
-
一种 创建交互式网页应用 的 网页开发技术
-
浏览器通过 js 异步发起请求,局部更新页面的技术
浏览器地址栏不会发生变化
局部更新不会舍弃原来页面的内容
-
同步请求:等待AJAX请求结束,再往下执行
异步请求:AJAX请求执行时,其他代码继续执行
-
用处:不要为了ajax而ajax,使用ajax的唯一条件为:页面不需要刷新且需要向后台发送请求时
① 分页
② 加入购物车
③ 表单数据校验(是需要执行业务逻辑的数据校验)
④ 等页面无需刷新但需要向后台发送请求的场景
原生 AJAX 请求的示例
示例
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="Expires" content="0" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
// 在这里使用 javaScript 语言发起 Ajax 请求,访问服务器 AjaxServlet 中 javaScriptAjax
function ajaxRequest() {
// 1、定义请求对象
var xmlhttprequest;
// 2、解决浏览器兼容问题
if(XMLHttpRequest)
{
// Chrome Firefox 高版本IE
xmlhttprequest = new XMLHttpRequest();
}else{
//低版本IE
xmlhttprequest = new ActiveXObject("Microsoft.XMLHttp");
}
// 3、调用 open 方法设置请求参数
xmlhttprequest.open("GET","/ajaxServlet?action=javaScriptAjax",true)
// 4、在 send 方法前绑定 onreadystatechange 事件,处理请求完成后的操作。
xmlhttprequest.onreadystatechange = function(){
if (xmlhttprequest.readyState == 4 && xmlhttprequest.status == 200) {
var jsonObj = JSON.parse(xmlhttprequest.responseText);
// 把响应的数据显示在页面上
document.getElementById("div01").innerHTML = "编号:" + jsonObj.id + " , 姓名:" +
jsonObj.name;
}
}
// 5、调用 send 方法发送请求
//设置请求头为application/x-www-form-urlencoded
xmlhttprequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttprequest.send();
}
</script>
</head>
<body>
<button onclick="ajaxRequest()">ajax request</button>
<div id="div01"></div>
</body>
</html>
实际开发中,后端 应该返回JSON格式的字符串!
public class AjaxServlet extends BaseServlet {
protected void javaScriptAjax(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Ajax请求过来了");
Person person = new Person(1, "MMM");
// json格式的字符串
Gson gson = new Gson();
String personJsonString = gson.toJson(person);
// 返回json字符串
resp.getWriter().write(personJsonString);
}
}
W3School中相关基础知识
XHR 请求
JS 发送Ajax请求的唯一途径
对象的创建要兼容不同的浏览器内核
XHR 响应
XHR readyState
jQuery 中的 AJAX 请求
$.ajax
$("#ajaxBtn").click(function(){
$.ajax({
url:"/ajaxServlet",
// data:"action=jQueryAjax",
data:{action:"jQueryAjax"},
type:"GET",
success:function (data) {
// alert("服务器返回的数据是:" + data);
// var jsonObj = JSON.parse(data);
$("#msg").html("编号:" + data.id + " , 姓名:" + data.name);
},
dataType : "json"
});
});
实际开发中,后端 应该返回JSON格式的字符串!
public class AjaxServlet extends BaseServlet {
protected void javaScriptAjax(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Ajax请求过来了");
Person person = new Person(1, "MMM");
// json格式的字符串
Gson gson = new Gson();
String personJsonString = gson.toJson(person);
// 返回json字符串
resp.getWriter().write(personJsonString);
}
}
$.get 与 $.post
// ajax--get 请求
$("#getBtn").click(function(){
$.get("/ajaxServlet","action=jQueryGet",function (data) {
$("#msg").html(" get 编号:" + data.id + " , 姓名:" + data.name);
},"json");
});
// ajax--post 请求
$("#postBtn").click(function(){
$.post("/ajaxServlet","action=jQueryPost",function (data){
$("#msg").html(" post 编号:" + data.id + " , 姓名:" + data.name);
},"json");
});
//Servlet部分同$.ajax
$.getJSON
// ajax--getJson 请求
$("#getJSONBtn").click(function(){
$.getJSON("/ajaxServlet","action=jQueryGetJSON",function(data) {
$("#msg").html(" getJSON 编号:" + data.id + " , 姓名:" + data.name);
});
});
$(selector).load()
发送ajax请求,将响应数据以innerHTML方式放到对应的jquery对象中
function doLoad(){
$("#errMsg").load("/ckName?name=abc");
}
<span id="errMsg"></span>
<button onclick="doLoad()" >load</button>
表单序列化
可以把表单中所有表单项的内容都获取到,并以 name=value&name=value
// ajax 请求
$("#submit").click(function(){
// 把参数序列化
// 直接将 $("#form01").serialize() 拼接进去,不用一一输入表单项内容
$.getJSON("/ajaxServlet",
"action=jQuerySerialize&" +$("#form01").serialize(),
function (data) {
$("#msg").html(" Serialize 编号:" + data.id + " , 姓名:" + data.name);
}
);
});
跨域AJAX尚未整理
尚未整理