在一个网页文件中可以采用如下的XMLHttpRequest对象的写法实现Ajax的异步操作
function getValueFromServer()
{
var xmlHttpRequest = null;
if(window.ActiveXObject)
{
//如果是通过microsoft的activeXObject实现的
xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
else if(window.XMLHttpRequest)
{
//如果是通过Firefox和Chrome实现的。
xmlHttpRequest = new XMLHttpRequest();
}
if(null != xmlHttpRequest)
{
//方法里的true代表是异步的方式,而false是同步的方式 发送GET请求, "MyServlet"表示的是请求的相对url
xmlHttpRequest.open("GET","addAction" + "?value1=" + value1 + "&value2=" + value2,true);
xmlHttpRequest.onreadystatechange = ajaxCallBack;
/*
如果发送的请求是GET类型的,参数赋值null
如果有请求参数在xmlHttpRequest.open("GET","MyServlet",true)中的"MyServlet"中添加,形式如"MyServlet?username=hello&password=world"
如果是POST的类型的参数以名值对的形式卸载send()方法里面
*/
xmlHttpRequest.send(null);
}
function ajaxCallBack()
{
if(xmlHttpRequest.readyState == 4)
{
//http请求是正确的(200)
if(xmlHttpRequest.status == 200)
{
//请求的数据格式为普通文本。
var responseText = xmlHttpRequest.responseText;
document.getElementById("div1").innerHTML = responseText;
}
}
}
}
至于服务器端可以采取如下的代码去配合(如果使用的是struts2的话)
ServletResponse httpServletResponse = ServletActionContext.getResponse();
PrintWriter printWriter = null ;
try
{
printWriter = httpServletResponse.getWriter();
}
catch (IOException e)
{
e.printStackTrace();
}
可以通过PrintWriter类的对象产生一个信号,回传给客户端。在之前的javascript的脚本段中定义的那个回调函数里有一个xmlHttpRequest.responseText; 标示回传的是一个普通的文本的格式而不是一个xml格式也不是一个json数据格式的。并且里面放的值就是PrintWriter对象所返回的数据。
function ajaxCallBack()
{
if(xmlHttpRequest.readyState == 4)
{
//http请求是正确的(200)
if(xmlHttpRequest.status == 200)
{
//请求的数据格式为普通文本。
var responseText = xmlHttpRequest.responseText;
document.getElementById("div1").innerHTML = responseText;
}
}
}
如果是servlet的话直接就是
PrintWriter printWriter = resp.getWriter(); //res为HttpServletRequest对象