局部刷新
来源:互联网 发布:江苏爱知投资有限公司 编辑:程序博客网 时间:2024/04/30 07:24
花了两天时间做了一下局部刷新。在这边写一下,希望有要学的不用象我一样走很多弯路,花了很多冤枉力气。废话少说,下面开始。
先介绍一下我用的环境,jdk1.5,tomcat5.0,eclipase3.2(插件MyEclipase5.0)
主要有三个文件。jsp,js,和java。我用的是struts。
1.partRefresh.jsp内容如下:
<%@ page language="java" contentType="text/html; charset=GBK"
pageEncoding="gbk"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>partRefresh test JSP page</title>
<script language="javascript" src="<%=path%>/js/partRefresh.js"></script>
<script type="text/javascript">
function testName(path)
{
var username = document.getElementById("username").value;
var viewName=document.getElementById("viewName");
var url =path+'/ajax.do?method=checkUserName&username='+username;
var freshFunction = "refreshViewName(objXMLReq,viewName)";
proxyRequest(url,freshFunction);
}
//刷新viewName内容
function refreshViewName(objXMLReq,obj)
{
if(objXMLReq.responseText=='0'){
obj.style.color='green';
obj.innerHTML='congratuation!此用户名可用。';
}else if(objXMLReq.responseText=='1'){
obj.style.color='red';
obj.innerHTML='sorry!此用户名已经被使用,换一个试试。';
}else{
obj.style.color='red';
obj.innerHTML='该用户名含有非法字符!';
}
}
</script>
</head>
<body>
<form action="">
<input name="username" id="username" type="text" maxlength="20" />
<input id="checkName" type="button" value="检测帐号"
onclick="testName('<%=path%>')" />
<span id="viewName"></span>
</form>
</body>
</html>
注意一下引入js的路径,改成自己的路径就行了。
第二行蓝字部分是自己的刷新函数。作为字符传入。
2。partRefresh.js文件
/**
*创建XML HTTP对象
*/
function createXMLHTTP(){
var arrSignatures = ["Microsoft.XMLHTTP","MSXML2.XMLHTTP.5.0","MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","MSMXL2.XMLHTTP"];
for (var i=0;i<arrSignatures.length;i++){
try{
var oRequest = new ActiveXObject(arrSignatures[i]);
return oRequest;
}catch(oError){
//ignore
}
}
throw new Error("MSMXL is not installed on yout system.");
}
/**
*发送异步请求
*/
function proxyRequest(url,freshFunction)
{
var objXMLReq = createXMLHTTP();
objXMLReq.onreadystatechange = function processRequest() {
//最后输出过程
if (objXMLReq.readyState == 4 && objXMLReq.status == 200) {
//在此加入html刷新内容
//alert(freshFunction);
eval(freshFunction);
}
}
objXMLReq.open("POST", url, true);
objXMLReq.send("");
}
3。AjaxAction.java文件
package com.neusoft.action;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import com.neusoft.partrefresh.JsContent;
import com.neusoft.partrefresh.ResponseProxy;
/**
*
* @author dudu
*
*/
public class AjaxAction extends DispatchAction {
/**
* 检验用户名
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws IOException
*/
public ActionForward checkUserName(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws IOException {
PrintWriter out = response.getWriter();
String username = request.getParameter("username");
out.print(username);
return null;
}
}
别忘了package写正确。
如果运行时提示viewName对象未定义脚本错误
可以把第一行蓝字改为
var viewName='document.getElementById("viewName")';
第二行改为
var freshFunction="refreshViewName(objXMLReq," + viewName +")";
应该就行了,我做这个例子的时候没什么问题,用同样的方法做另一个功能是就不行了,改了就行。最后别望了在struts-config.xml里配置一下action啊。
本人初学,希望有高手路过,留下两招啊,谢谢啊。^_^
- 局部刷新
- 局部刷新
- 局部刷新
- 局部刷新
- 局部刷新
- 局部刷新
- 局部刷新
- 局部刷新
- 局部刷新
- 局部刷新,全局刷新
- 【js局部刷新】js局部刷新代码
- 局部刷新与全局刷新
- ajax局部刷新
- 局部刷新验证码
- ajax局部刷新
- 局部刷新实例 ajax
- ajax局部无刷新
- iframe局部刷新
- 软件系统开发中的组件框架技术研究、设计和应用
- SQL2000出现未能建立与(local)的连接的解决办法
- PLC及PC与RFID射频识别读写器串行通讯的实现
- google苏州地图
- spring入例(1)
- 局部刷新
- Windows多线程间同步事件的控制方法
- 学会放弃
- VC缺省链接库的顺序不对导致链接错误
- 关于查找内存泄漏
- 关于英文名
- 构建基于forms的验证机制过程如下
- C++-namespace(命名空间)
- 最近想做并且要尽力做的一些事