如果你是想在加载jsp也面的时候触发<script> , 那我想这是没意义的.
ajax的目的是局部刷新,并不是通过action返回的jsp来整体刷新.
你要提交的到action中,但是并不返回一个jsp ,而是返回这个函数的结果,
然后在页面上通过js来操纵刚才返回的结果改变局部的东西.我想过程应该是这样的,你有个按纽,触发个js事件,在事件里面与action中的函数交互,等结果回来后在改变这个页面上局部的值.
ajax的目的是局部刷新,并不是通过action返回的jsp来整体刷新.
你要提交的到action中,但是并不返回一个jsp ,而是返回这个函数的结果,
然后在页面上通过js来操纵刚才返回的结果改变局部的东西.我想过程应该是这样的,你有个按纽,触发个js事件,在事件里面与action中的函数交互,等结果回来后在改变这个页面上局部的值.
1.需要一个
<html:text property="username" />
<html:button property="checkUser" onclick="retrieveURL('register.do?username='+username.value+'×tampe='+(new Date()));">2.在Action中获取提交的内容,进行判断
//判断是否是ajax提交
if(request.getParameter("username")!=null && request.getParameter("timestampe")!=null){
String result="";
String username=request.getParameter("username");
username=PageHelp.iso_8859_1ToGb2312(username);
if(username!=null && !"".equals(username)){
if(userBo.isExists(username)){
result="对不起,用户已存在!";
}else{
result="恭喜,该用户可用!";
}
}
response.setContentType("text/html");
response.setCharacterEncoding("GB2312");
PrintWriter out=null;
try {
out = response.getWriter();
} catch (IOException e) {
e.printStackTrace();
}
out.print(result);
return null;
}3.还需要一段js代码配合
var req;
var which; function retrieveURL(url) {
if (window.XMLHttpRequest) { // Non-IE browsers
req = new XMLHttpRequest();
req.onreadystatechange = processStateChange;
try {
req.open("GET", url, true);
} catch (e) {
alert(e);
}
req.send(null);
} else if (window.ActiveXObject) { // IE
req = new ActiveXObject("Microsoft.XMLHTTP");
if (req) {
req.onreadystatechange = processStateChange;
req.open("GET", url, true);
req.send();
}
}
} function processStateChange() {
if (req.readyState == 4) { // Complete
if (req.status == 200) { // OK response
//document.getElementById("span1").innerHTML = req.responseText;
alert(req.responseText);
} else {
alert("Problem: " + req.statusText);
}
}
}总结:
首先,通过XMLHttpRequest将***.do的URL请求发送到对应的Action上;
Action判断是否是Ajax提交的查询,如果是返回一段xml或html代码,也可以是字符串;
最后,XMLHttpRequest将Action返回的内容显示出来,这里演示的是alert方式显示,当然也可以innerHTML方式显示。注意:
我在URL中加入timestampe='+(new Date()...,这是为什么呢?
大家都知道浏览器有缓存,如果url不变,浏览器可能会从缓存中读取数据,就会造成没有提交Server查询而返回上次查询的结果。使用了new Date()是保证每次URL都不一样。
1、后台验证
2、客户端验证
3、ajax验证
第三种验证过程大概是这样的。在生成页面的时候如果有theme=ajax这样的字段,就会插入相关的代码(见struts2的showcase验证代码)
<script language="JavaScript" type="text/javascript" src="/struts2-showcase-2.0.11/struts/niftycorners/nifty.js"></script> <script language="JavaScript" type="text/javascript"> window.onload=function(){
if(!NiftyCheck())
return;
Rounded("blockquote","tr bl","#ECF1F9","#CDFFAA","smooth border #88D84F");
Rounded("div#outer-header", "all", "white", "#818EBD", "smooth border #434F7C");
Rounded("div#footer", "all", "white", "#818EBD", "smooth border #434F7C");
} </script><script type="text/javascript">
// Dojo configuration
djConfig = {
baseRelativePath: "/struts2-showcase-2.0.11/struts/dojo",
isDebug: false,
bindEncoding: "UTF-8",
debugAtAllCosts: true // not needed, but allows the Venkman debugger to work with the includes
};
</script>
<script type="text/javascript"
src="/struts2-showcase-2.0.11/struts/dojo/dojo.js"></script>
<script type="text/javascript"
src="/struts2-showcase-2.0.11/struts/simple/dojoRequire.js"></script><script type="text/javascript"
src="/struts2-showcase-2.0.11/struts/ajax/dojoRequire.js"></script>
<script type="text/javascript"
src="/struts2-showcase-2.0.11/struts/CommonFunctions.js"></script>
如果有兴趣知道他是怎么验证的,你可以看这些代码