Ajax之XMLHttpRequst对象
2024-08-30 23:16:55
XMLHttpRequest对象提供客户端与Http服务器异步通信的协议。通过该协议,Ajax可以使页面像桌面应用程序一样,只同服务器进行数据层的交换,而不用每次都刷新页面,也不用每次将数据处理工作提交给服务器来做,这样既减轻了服务器的负担又加快了响应速度,缩短了用户等待的时间。
Ajax请求和响应过程如下:
- 网页调用JavaScript 程序
- JavaScript利用浏览器提供的XML对象向Web服务器发送请求
- 请求的URL资源处理后返回结果给浏览器的XMLHTTP对象
- XMLHTTP对象调用实现设置的处理方法
- JavaScript方法解析返回的数据,利用返回的数据更新页面
abort() | 停止当前请求 |
getAllResponseHeader("header") | 将Http请求的所有响应首部作为键值对返回 |
open("method","url"[,"asyncFlag"[,"userName"[,"password"]]]) | asyncFlag=是否非同步标记 |
send(content) | 向服务器发送请求 |
setRequestHeader("header","value") | 把指定首部设置为所提供的值,在调用该方法之前必须先调用open方法 |
getResponseHeader("header") | 返回指定首部的字符串值 |
onreadystatechange | 状态该表触发器,每个状态改变都会触发这个事件触发器 |
readyState |
对象状态: 0=未初始化 1=正在加载 2=已加载 3=交互中 4=完成 |
responseText | 服务器的相应,字符串 |
responseXML | 服务器的相应,XML,该对象可以解析为一个DOM对象 |
status | 服务器返回的HTTP状态码 |
statusText | HTTP状态码的相应文本 |
建立项目名为AjaxTest:
编写Servlet 类 CheckUser:
package org.servlet; import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class CheckUser extends HttpServlet { @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(req, resp);
}
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
//为方便起见,这里假设数据库中有这些学号
//在实际应用中应该是从数据库中查询得来的
String[] xhs = {"01001","01002","01003"};
//取得用户填写的学号
String xh = request.getParameter("xh");
//设置响应内容
String responseContext = "true";
for (int i= 0; i< xhs.length; i++) {
//如果有该学号,修改响应内容
if (xh.equals(xhs[i])) {
responseContext="false";
}
}
//将处理结果返回给客户端
out.print(responseContext);
out.flush();
out.close(); } }
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>AjaxTest</display-name>
<servlet>
<servlet-name>CheckUser</servlet-name>
<servlet-class>org.servlet.CheckUser</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CheckUser</servlet-name>
<url-pattern>/CheckUser</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html>
<head>
<title>Ajax应用</title>
</head>
<script type="text/javascript">
var xmlHttp;
//创建XMLHttpRequest对象
function createHttpRequest(){ if(window.ActiveXobject){
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}else if(window.XMLHttpRequest){
xmlHttp = new XMLHttpRequest();
}
}
function beginCheck(){
//得到用户填写的学号
var xh=document.all.xh.value;
//如果为空
if(xh==""){
alert("对不起,请输入注册学号!");
return ;
}
createHttpRequest();
//将触发器绑定到一个函数
xmlHttp.onreadystatechange=processor;
//通过post方法向指定的URL,即Servlet对应URL建立服务器的调用
xmlHttp.open("post","CheckUser?xh="+xh);
//发送请求
xmlHttp.send(null);
}
//处理状态改变函数
function processor(){
var responseContext;
//如果响应完成
if(xmlHttp.readyState==4){
//如果返回成功、
if (xmlHttp.status == 200) {
//取得响应内容
responseContext = xmlHttp.responseText;
//如果注册名检查有效
if (responseContext.indexOf("true")!=-1) {
alert("恭喜你,该学号有效");
} else {
alert("对不起,该学号已经被注册!");
}
}
} }
</script>
<body>
<form action="">
<!-- 当输入框改变时执行bengincheck()函数 -->
学号:<input type="text" name="xh" onchange="beginCheck()"/><br/>
口令:<input type="password" name="kl"/>
<input type="submit" value="注册"/>
</form>
</body>
</html>
最新文章
- centos 6.x安装rvm 配置 Ruby开发环境
- AxureRP8实战手册(基础31-40)
- <;head>;<;/head>;
- CSRF防御之ASP.NET MVC
- Java开发中经典的小实例-(字符串比较)
- Stay教你程序员泡妞攻略
- MySQL中Group By,distinct使用注意事项
- Xcode的控制台调试命令
- php输出echo、print、print_r、printf、sprintf、var_dump的区别比较
- 搭建git远程服务器三步骤
- Android ROM包定制(解包,增删模块,打包)
- 【DevExpress】GridView的RowClick事件禁用Checkbox选择的解决办法
- py库:os、shutil、pathlib
- Redis的过期策略和内存淘汰机制
- 20165225《Java程序设计》第九周学习总结
- 洛谷P3295 萌萌哒 [SCOI2016] 倍增+并查集
- 第七章 伪分布式安装hive,sqoop
- 探讨下在Delphi里面进程之间的数据共享
- 为什么js引入页面后不起作用?
- BZOJ_5359_[Lydsy1805月赛]寻宝游戏_DP
热门文章
- CSS:div/img水平垂直居中
- CAD控件:梦想CAD控件功能更新 清除图上的所有高亮实体
- nginx平滑升级实战
- 常用HTML5代码片段
- Java写时复制CopyOnWriteArrayList
- redis 指定端口 启动
- https://blog.csdn.net/zhi_sheng/article/details/78910082----mybatis写当天 当月的数据 时间段数据
- type=";timestamp";与type=";date";区别
- Linear and Logistic Regression in TensorFlow
- [ZJOI2008]杀蚂蚁antbuster