本文给大家分享的是如何实现ajax的异步功能,非常的详细,也很实用,适合javascript的初学者,有需要的小伙伴参考下。
关于ajax异步功能的小实验为了实验ajax的异步
性,先建一个web项目,结构大概是这个样子
testservlet.java(主要是提供ajax后台调用的程序)
import java.io.ioexception;
import java.text.simpledateformat;
import java.util.date;
import javax.servlet.servletexception;
import javax.servlet.annotation.webservlet;
import javax.servlet.http.httpservlet;
import javax.servlet.http.httpservletrequest;
import javax.servlet.http.httpservletresponse;
/**
* servlet implementation class testservelet
*/
@webservlet("/testservelet")
public class testservlet extends httpservlet {
private static final long serialversionuid = 1l;
/**
* default constructor.
*/
public testservlet() {
}
/**
* @see httpservlet#doget(httpservletrequest request, httpservletresponse response)
*/
protected void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception {
//为了体现程序的异步性,先让它睡3s
try {
thread.sleep(3000);
} catch (interruptedexception e) {
e.printstacktrace();
}
response.setcharacterencoding("utf-8");
//打印出程序运行的时间
system.out.println("异步程序运行时间:"+new simpledateformat("yyyy-mm-dd hh:mm:ss:sss") .format(new date()));
}
/**
* @see httpservlet#dopost(httpservletrequest request, httpservletresponse response)
*/
protected void dopost(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { // todo auto-generated method stub
doget(request, response);
}
}
testajax.jsp(前台页面和js,触发异步调用)
<%@ page language="java" contenttype="text/html;charset=utf-8" %>
<html >
<head></head>
<body onload="testajax()">
hello ajax!<br>
</body>
</html>
<script language="javascript">
function testajax(){
fngetajaxreturn('http://localhost:8080/testproject/testservlet?a='+math.random());
}
function fngetajaxreturn(url)
{
var useragent = navigator.useragent;
var http_request = false;
//开始初始化xmlhttprequest对象
if(window.xmlhttprequest) { //mozilla 浏览器
http_request = new xmlhttprequest();
if (http_request.overridemimetype) {//设置mime类别
http_request.overridemimetype("text/xml");
}
}
//else if (window.activexobject) { // ie浏览器
else if (window.activexobject||useragent.indexof("trident") > -1){
try {
http_request = new activexobject("msxml2.xmlhttp");
} catch (e) { try {
http_request = new activexobject("microsoft.xmlhttp");
} catch (e) {alert("错了吧");}
}
} if (!http_request) { // 异常,创建对象实例失败
window.alert("不能创建xmlhttprequest对象实例.");
return false;
}
http_request.open("get", url, true);//true 异步 false 同步
http_request.send();
alert("异步请求之后执行时间:"+new date +'\n毫秒数:'+ new date().getmilliseconds());
}</script>
说明:jsp页面加载之后调用一个js,js中会先发出一个异步请求,再执行一个alert弹出操作。
下面开始试验
用ie浏览器,运行url
http://localhost:8080/testproject/testajax.jsp
发现,程序先弹出了alert,过了3s钟,ajax才返回了后台结果,充分证明了ajax的异步性。
运行结果:
从时间的差异性,发现程序先执行结束(执行了alert),过了3s钟,异步程序才返回结果。
反过来,如果把jsp文件中的
http_request.open("get", url, true);
true 改为 false 呢?
运行url,发现程序在苦苦等待servlet后台请求返回之后,才执行了js中的最后一段代码alert,正是所谓的同步调用。
运行结果如下:
the end!
以上就是如何实现ajax 的异步功能的详细内容。