Ajax操作
一、原生Ajax
1.1 操作步骤
- 创建XMLHttpRequest对象。
- 设置请求方式。
- 调用回调函数。
- 发送请求。
1.2 GET请求操作
前台
<body>
<div>
<h4>请输入要添加的用户的信息:</h4><br>
<form action="/addStudent" method="post">
学号:<input name="studentNo" id="studentNo" type="text" onclick="clearInfo()" onblur="checkNo()"><span id="studentNo_info"></span><br><br>
姓名:<input name="stuName" type="text"><br><br>
年龄:<input name="stuAge" type="text"><br><br>
<input type="submit" value="添加"><i></i><input type="reset">
</form>
</div>
</body>
<script type="text/javascript">
function checkNo() {
//1. 创建XMLHTTPRequest对象
var xmlHTTP;
if(window.XMLHttpRequest){
//非IE
xmlHTTP = new XMLHttpRequest();
}else if (window.ActiveXObject){
//IE
xmlHTTP = new ActiveXObject("Microsoft.XMLHTTP");
}
var parameter = document.getElementById("studentNo").value;
console.log("parameter:"+parameter);
//2. 设置请求方式
xmlHTTP.open("get","/FindNO?studentNo="+parameter+"&time="+Math.random(),true);//添加时间随机参数,防止读取缓存
//3. 调用回调函数
xmlHTTP.onreadystatechange = function () {
if(xmlHTTP.readyState == 4){
var flag = xmlHTTP.responseText;
if(xmlHTTP.status == 200){
//接收返回的内容
if(flag==1){
var obj = document.getElementById("studentNo_info");
obj.innerText = "学号已存在";
}
}else{
alert("Ajax服务器返回错误");
}
}
}
//4. 发送请求
xmlHTTP.send(null)
}
function clearInfo() {
var obj = document.getElementById("studentNo_info");
obj.innerText = "";
}
</script>
GET请求的参数是在第二步的时候就拼接好了的,所以第四步发送时,send方法参数只需写null就好。
后台
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1. 接收参数
req.setCharacterEncoding("utf-8");//这种方式只对POST请求有效
String studentNo = req.getParameter("studentNo");
//2. 验证 注意:ajax请求处理完毕后,返回数据时使用PrintWriter输出流,且ajax默认返回原页面
StudentService stuService = new StudentServiceImpl();
Student student = stuService.findStuByNO(studentNo);
resp.setContentType("text/html;charset=utf-8");//返回的值参数有中文的话,这个必须要有
PrintWriter writer = resp.getWriter();
if(student!=null){
//用户名已存在
writer.print(1);
}else{
//用户名不存在
writer.print(0);
}
}
1.3 POST请求操作
前台
<body>
<div>
<h4>请输入要添加的用户的信息:</h4><br>
<form action="/addStudent" method="post">
学号:<input name="studentNo" id="studentNo" type="text" onclick="clearInfo()" onblur="checkNo()"><span id="studentNo_info"></span><br><br>
姓名:<input name="stuName" type="text"><br><br>
年龄:<input name="stuAge" type="text"><br><br>
<input type="submit" value="添加"><i></i><input type="reset">
</form>
</div>
</body>
<script type="text/javascript">
function checkNo() {
//1. 创建XMLHTTPRequest对象
var xmlHTTP;
if(window.XMLHttpRequest){
//非IE
xmlHTTP = new XMLHttpRequest();
}else if (window.ActiveXObject){
//IE
xmlHTTP = new ActiveXObject("Microsoft.XMLHTTP");
}
//2. 设置请求方式
xmlHTTP.open("post","/FindNo",true);//添加时间随机参数,防止读取缓存
//3. 调用回调函数
xmlHTTP.onreadystatechange = function () {
if(xmlHTTP.readyState == 4){
var flag = xmlHTTP.responseText;
console.log("flag:"+flag);
if(xmlHTTP.status == 200){
//接收返回的内容
if(flag==1){
var obj = document.getElementById("studentNo_info");
obj.innerText = "学号已存在";
}
}else{
alert("Ajax服务器返回错误");
}
}
}
//4. 发送请求
var parameter = document.getElementById("studentNo").value;
var params = "studentNo="+parameter;//添加时间随机参数,防止读取缓存
xmlHTTP.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8");//向请求添加HTTP头,POST有数据一定要加
xmlHTTP.send(params)//有参数就写参数,没有直接写null
}
function clearInfo() {
var obj = document.getElementById("studentNo_info");
obj.innerText = "";
}
</script>
tips:
!!!POST请求一定要设置HTTP头,不然后台接收不到传来的参数
xmlHTTP.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8");
后台
参照GET方式
二、JQuery中的Ajax
三种方式:
- 用ajax()
<body>
<div>
<h4>请输入要添加的用户的信息:</h4><br>
<form action="/addStudent" method="post">
学号:<input name="studentNo" id="studentNo" type="text" onfocus="clearInfo()"><span id="studentNo_info"></span><br><br>
姓名:<input name="stuName" type="text"><br><br>
年龄:<input name="stuAge" type="text"><br><br>
gao:<input type="text" id="hello">
<input type="submit" value="添加"><i></i><input type="reset">
</form>
</div>
</body>
<script type="text/javascript" src="/js/jquery-1.8.0.min.js"></script>
<script type="text/javascript">
function clearInfo() {
var obj = document.getElementById("studentNo_info");
obj.innerText = "";
}
$(function () {
$("#studentNo").blur(function () {
var parameter = $(this).val();
$.ajax({
url:"/FindNo",
data:"studentNo="+parameter+"&time="+Math.random(),
type:"get",
data_type:"text",
success:function (result) {
if(result==1){
$("#studentNo_info").text("用户已存在");
}
},
error:function () {
alert("出错啦...")
}
});
});
})
</script>
- 用get()
$.get("/FindNo","studentNo="+parameter+"&time="+Math.random(),function (result) {
if(result==1){
$("#studentNo_info").text("用户已存在");
}
})
- 用post()
$.post("/FindNo","studentNo="+parameter+"&time="+Math.random(),function (result) {
if(result==1){
$("#studentNo_info").text("用户已存在");
}
})
get()和post()虽然简洁,但是 功能也没有ajax()多,例如,ajax还可以设置error错误回调函数。