jsp中,用ajax获取数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jsp中,用ajax获取数据相关的知识,希望对你有一定的参考价值。

我想利用ajax在jsp页面中获取从数据库中的数据,比如用户名,我在servlet里面写了一个查询语句,比如得到用户名为‘张三’(String 类型),我如何将这个张三传到jsp页面,利用js设置 document.getElementById("textfield").Value='参数(张三)',关键是不知道怎么从servlet中传出去。

jsp中用ajax获取数据的例子如下:
jsp代码:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
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>
<TITLE>留学生系统</TITLE>
<META http-equiv=Content-Type content="text/html; charset=GBK">
<SCRIPT language=javascript type=text/JavaScript>
var XMLHttpReq = false;
//ajax接口
function createXMLHttpRequest()
if(window.XMLHttpRequest)
XMLHttpReq = new XMLHttpRequest();
else if(window.ActiveXObject)
try
XMLHttpReq = new ActiveXObject("MSXML2.XMLHTTP");
catch(e)
try
XMLHttpReq = new ActiveXObject("Mircsoft.XMLHTTP");
catch(e1)



function sendRequest(url)
createXMLHttpRequest();
XMLHttpReq.open("GET",url,true);
XMLHttpReq.onreadystatechange = processResponse;
XMLHttpReq.send(null);

function processResponse()
if(XMLHttpReq.readyState == 4)
if(XMLHttpReq.status == 200)
var res = XMLHttpReq.responseXML.getElementsByTagName("res")[0].firstChild.data;
window.alert(res);
document.myform.userid.value="";
document.myform.pwd.value="";
else
window.alert("你请求的页面有异常1");



function userCheck()
var userid = document.myform.userid.value;
var pwd = document.myform.pwd.value;
if(userid == "")
window.alert("用户名不能为空");
document.myform.pwd.value="";
document.myform.userid.focus();
return false;
else
sendRequest("login?userid="+userid);


function pwdCheck()
var pwd = document.myform.pwd.value;
var pwd2 = document.myform.pwd2.value;
if(pwd!=pwd2)
window.alert("密码不一致");
document.myform.pwd.value="";
document.myform.pwd2.value="";
document.myform.pwd.focus();
return false;


</SCRIPT>
<LINK href="css/css.css" type=text/css rel=stylesheet>
</HEAD>

<body>
<table border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" >
<tr>
<td ><img src="images/logo.jpg" ></td>
<td background="images/banner.jpg"><div align="center">
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" >
<param name="movie" value="images/2.swf">
<param name="quality" value="high">
<embed src="images/2.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" ></embed>
<param name="wmode" value="transparent">
</object>
</div></td>
<td ><table border="0" cellpadding="0" cellspacing="0" >
<tr>
<td class="style1"><div align="center">设为首页</div></td>
</tr>
<tr>
<td class="style1"><div align="center">收藏本站</div></td>
</tr>
<tr>
<td class="style1"><div align="center">联系我们</div></td>
</tr>
</table></td>
</tr>
</table>
<form method="post" action="control.jsp?action=register" name="myform">
<table border="0" align="center" bgcolor="#F0F0F0">
<tr>
<td align="center">用户名</td>
<td><input name="userid" type="text" size="20" onblur="userCheck()"></td>
</tr>
<tr>
<td align="center">真实姓名</td>
<td><input name="username" type="text" size="20"/></td>
</tr>
<tr>
<td align="center">性别</td>
<td>
<input type="radio" name="sex" value="0" checked="checked">男
<input type="radio" name="sex" value="1">女
</td>
</tr>
<tr>
<td align="center">密码</td>
<td><input name="pwd" type="password" size="20"/></td>
</tr>
<tr>
<td align="center">密码确认</td>
<td><input name="pwd2" type="password" size="20" onblur="pwdCheck()"/></td>
</tr>
<tr>
<td align="center">电子邮箱</td>
<td><input name="email" type="text" size="20"/></td>
</tr>
<tr>
<td align="center">学校</td>
<td><input name="school" type="text" size="20"/></td>
</tr>
<tr>
<td align="center">电话号码</td>
<td><input name="phonenum" type="text" size="20"/></td>
</tr>
<tr>
<td align="center"><img border=0 src="image.jsp"></td>
<td><input type=text name=in maxlength=4 size="8"></td>
</tr>

<tr>
<td align="center"><input type="submit" value="确定" /></td>
</tr>
</table>
</form>
</body>
</html>
参考技术A PrintWriter out = response.getWriter();
out.println("zhangsan");;

页面不是有接收文本的方法么就直接可以获取了啊追问

这个方法貌似是直接打印到页面上了,我关键是用ajax,也就是说我查询出结果之后,ajax就可以获取到结果,将结果显示在文本框中。

追答

if(xmlHttp.readyState==4)
if(xmlHttp.status==200)
var str = xmlHttp.responseText;
alert(str);

else
alert("失败")

参考技术B HttpServletResponse response = ServletActionContext.getResponse();
response.setHeader("ContentType", "text/json");
response.setCharacterEncoding("utf-8");
response.getWriter().write(张三);

ajax中的msg就是你传过来的值!追问

谢谢,我用其他方法解决了,谢谢

本回答被提问者采纳
参考技术C 直接用jsp就可以了,干嘛用servlet呢!ajax可以直接用jsp的!追问

servlet是进行数据库查询,我已经解决了,还是谢谢你。

用ajax发送参数

【中文标题】用ajax发送参数【英文标题】:sending parameters with ajax 【发布时间】:2011-02-23 04:28:33 【问题描述】:

我正在尝试使用 ajax 将从我的 jsp 中的表中获取的参数发送到其他 JSP。 我正在使用 followinf 函数将所有值发送到 JSP:ajaxForm 但我不知道为什么每次运行时发送失败:

这里是javascript函数:

function editarow() 
    var xhr = getXhr();
    xhr.onreadystatechange = function() 
        if (xhr.readyState == 4 && xhr.status == 200) 
            selects = xhr.responseText;
            // On se sert de innerHTML pour rajouter les options a la liste
            document.getElementById('prjsel').innerHTML = selects;
        
    ;

    var row, firstNameCell, lastNameCell;
    var table = document.getElementById("sheet");
    var buttons = table.getElementsByTagName("button");
    for (var i = 0; i < buttons.length; i++) 
        if (buttons[i].name == "edit") 
            buttons[i].onclick = function() 
                row = this.parentNode.parentNode;

                // The first name cell is the first child
                NameCell1 = findElement(row.firstChild);
                NameCell2 = findElement(NameCell1.nextSibling);
                NameCell3 = findElement(NameCell2.nextSibling);
                NameCell4 = findElement(NameCell3.nextSibling);
                NameCell5 = findElement(NameCell4.nextSibling);
                NameCell6 = findElement(NameCell5.nextSibling);
                NameCell7 = findElement(NameCell6.nextSibling);

                // `innerHTML` pour obtenir la valeur
                /*alert("name 1  is " + NameCell1.innerHTML);
                alert("name 2  is " + NameCell2.innerHTML);
                alert("name 3  is " + NameCell3.innerHTML);
                alert("name 4  is " + NameCell4.innerHTML);
                alert("name 5  is " + NameCell5.innerHTML);
                alert("name 6  is " + NameCell6.innerHTML);
                alert("name 7 is " + NameCell7.innerHTML);*/

            
        
    

    xhr.open("POST", "ajaxForm.jsp", true);
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xhr.send("NameCell1="+NameCell1,"NameCell2="+NameCell2,"NameCell3="+NameCell3,"NameCell4="+NameCell4,"NameCell5="+NameCell5,"NameCell6="+NameCell6,"NameCell7="+NameCell7 );

从表中获取值后,我想将它们全部发送到ajaxForm.jsp

【问题讨论】:

【参考方案1】:

从最后一行开始:

xhr.send("NameCell1="+NameCell1,"NameCell2="+NameCell2,"NameCell3="+NameCell3,"NameCell4="+NameCell4,"NameCell5="+NameCell5,"NameCell6="+NameCell6,"NameCell7="+NameCell7 );

这不是在 JavaScript 中连接字符串的方法。

由于您使用的是 JSP,因此您也应该了解 Java。您应该像在 Java 中那样在 JavaScript 中连接字符串:

xhr.send("NameCell1=" + NameCell1 + ",NameCell2=" + NameCell2 + "etc...");

也就是说,这应该在 JavaScript 控制台中出错。你有注意这个吗?无论如何,为了更好的 JavaScript 调试,我建议你使用Firebug,为了减少冗长/不透明和更多兼容跨浏览器的 Ajax 处理和 HTML DOM 遍历,我强烈建议你看看jQuery。使用 jQuery 和 Ajax Form Plugin,您只需以下几行即可:

$(document).ready(function() 
    $('#formId').ajaxForm(function(response) 
        $('#prjsel').html(response);
    );
);

这样您就不必担心浏览器的具体细节以及如何正确发送请求。

【讨论】:

【参考方案2】:

send 方法只接受一个参数。您无法转换数据,因此它是 application/x-www-form-urlencoded 字符串。

即一组键和值(其中键和值都使用 encodeURIComponent 处理,并用 & 分隔。

【讨论】:

以上是关于jsp中,用ajax获取数据的主要内容,如果未能解决你的问题,请参考以下文章

我想问一下如何获取ajax传过来的数据,比如在.cs或者在jsp页面获取ajax传过来的数据,然后写入数据库。

SSM框架下jsp页面怎么获取数据库的数据

怎么获取AJAX前台返回JSON 数据

java 在jsp中怎样获取servlet中的数据

用 ajax 响应数据替换部分视图

从 servlet 获取数据到 JSP 并通过 ajax 再次将该数据发送到另一个 servlet