Ajax可以对服务器发送异步请求,从而在不刷新整个页面的情况下局部刷新页面。
1. GET方式
$(document).ready(function(){
$("#btnsub").click(function(){
var xmlhttp,cardId,date;
cardId=$("#cardId").val();
date=$("#date").val();
var str="cardId="+cardId+"&date="+date;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","ajax!findRecord.action?"+str,true);
xmlhttp.send();
});
});
通过在请求的URL”?”后加参数而达到传参的目的。
对于URL尾部的参数,后台action中只要通过request域对象即可取值。
HttpServletRequest request=ServletActionContext.getRequest();
HttpServletResponse response=ServletActionContext.getResponse();
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
Integer cardId=Integer.parseInt(request.getParameter("cardId"));
String date=request.getParameter("date");
struts2里配置为:
<package name="actionA" extends="json-default">
<global-allowed-methods>regex:.*</global-allowed-methods>
<action name="ajax!*" class="ajaxAction" method="{1}">
<result type="json"></result>
</action>
</package>
2. —- POST方式
post请求方式相对于get请求方式更加安全(数据信息不会显示在URL中),发送请求能提交的数据也更大。
$(document).ready(function(){
$("#btnsub").click(function(){
var xmlhttp,cardId,date;
cardId=$("#cardId").val();
date=$("#date").val();
var str="cardId="+cardId+"&date="+date;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("POST","ajax!findRecord.action",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=utf-8");
xmlhttp.send(str);
});
});
后台action内获取ajax发送来的数据参数方式同上。
它是最底层、功能最强大的请求服务器数据方式,它的调用格式为:
$.ajax([settings]);
接下来是实际使用:
$(document).ready(function(){
function doappend(list){
var tbody="";
for(i in list){
tbody+="<tr><td>"+list[i].userId+"</td><td>"+list[i].userName+"</td><td>"+list[i].email+"</td><td>"+list[i].password+"</td><td>"+list[i].cards+"</td><td><a href=\"#\">修改</a> <a href=\"#\">删除</a></td></tr>";
}
document.getElementById("divtable").innerHTML=tbody;
};
$("#btnSend").click(function(){
$(this).attr("disabled",true);
var pag=document.getElementById("thepage").innerText;
$.ajax({
type:"POST",
url:"ajax!findall.action",
data:{"page":pag},
dataType:"json",
success:function(data){
var a=eval('('+data+')');
var am=a.aMap;
var list=am.user;
doappend(list);
}
});
});
});
data:标签对应为发送给服务器后台的数据,必须要使用json格式{”name”:name,”id”:id}。type对应请求方式,url为请求的定位,dataType为服务器返回数据的类型,success为成功获取服务器返回数据后可以执行的操作(这里我正在做分页,把页数发送给服务器,服务器查询数据库后返回相应条数的数据)。
function里的data为服务器返回的数据,这里是一个hashmap类型,先对data用eval方法进行json格式解析,aMap为当时hashmap设置的name值,在hashmap格式里,key值为‘user’对应的对象,为一个list
private String page;
HashMap<String, Object> aMap=new HashMap<String,Object>();
public HashMap<String, Object> getaMap() {
return aMap;
}
public String getPage() {
return page;
}
public void setPage(String page) {
this.page = page;
}
public String findall() {
int c=userService.count();
int d;
if(0==c%5) {
d=c/5;
}else {
d=(c/5)+1;
}
aMap.clear();
int p=Integer.parseInt(page);
if(p<1||p>d) {
return NONE;
}else {
int begin=(p-1)*5;
List<User> pList=userService.findPage(begin, 5);
List<UserForAjax> uList=new ArrayList<UserForAjax>();
for (User user : pList) {
StringBuffer sv=new StringBuffer("");
for(BankCard bCard:user.getSetBank()) {
sv.append(bCard.getCardId()+" ");
}
String str=sv.toString();
UserForAjax userForAjax=new UserForAjax();
userForAjax.setUserId(user.getUserId());
userForAjax.setEmail(user.getEmail());
userForAjax.setPassword(user.getPassword());
userForAjax.setUserName(user.getUserName());
userForAjax.setCards(str);
uList.add(userForAjax);
}
aMap.put("user", uList);
aMap.put("result", "success");
return SUCCESS;
}
}
后台代码中,通过命名一个叫做page的string对象,并生成set和get方法,接收请求后,就能直接得到请求数据中的page对象的值(会调用set方法给this.page赋值),另外创建一个hashmap对象用来存放返回给前端的数据,并生成get方法,这样ajax那边才能得到返回的aMap,在方法中给aMap存入需要传递的值。
一个简单的分页就做好啦!