81,094
社区成员
发帖
与我相关
我的任务
分享
<a href="javascript:;" onclick="show2(<%=goodsid%>)" id="goods"><img src="images/present/as1.gif" /></a>
//这是按钮,调用show2()函数弹出一个层,在层中显示goodsid相对应的物品信息,goodsid通过ajax无刷新传递
以下是在层根据id获取的物品信息
<%
String goodsid="";
String goodsname="";
String goodsimage="";
int goodsmoney=0;
String id="";
if(request.getParameter("goodsid")==null)
{
goodsid="1";
}
if(request.getParameter("goodsid")!=null)
{
goodsid=request.getParameter("goodsid");
}
System.out.println("这是节日送礼语句"+"SELECT goodsname,goodsmoney,goodsimage FROM goods_info WHERE goodsid='"+goodsid+"'");
db.executeQuery("getGoodsInfo","SELECT goodsname,goodsmoney,goodsimage FROM goods_info WHERE goodsid='"+goodsid+"'");
if(db.next("getGoodsInfo"))
{
goodsname=db.getString("getGoodsInfo","goodsname");
goodsimage=db.getString("getGoodsInfo","goodsimage");
goodsmoney=db.getInt("getGoodsInfo","goodsmoney");
}
db.clearQuery("getGoodsInfo");
out.print(goodsname);
%>
var XMLHttpReq,giftid; //创建XMLHttpRequest对象
function createXMLHttpRequest()
{
if(window.XMLHttpRequest)
{
//Mozilla浏览器
XMLHttpReq = new XMLHttpRequest();
}else if(window.ActiveXObject)
{
//IE浏览器
try
{
XMLHttpReq = new ActiveXObject( "Msxm12.XMLHTTP" );
}catch(e)
{
try
{
XMLHttpReq = new ActiveXObject( "Microsoft.XMLHTTP" );
}catch(e)
{}
}
}
}
//发送Ajax请求
function sendAjaxRequest(url)
{
createXMLHttpRequest(); //创建XMLHttpRequest对象
XMLHttpReq.open("get",url,false);
XMLHttpReq.onreadystatechange = processResponse;//指定响应函数
XMLHttpReq.send(null);
}
//回调函数processResponse
function processResponse()
{
if(XMLHttpReq.readyState==4)
{ //对象状态
if(XMLHttpReq.status==200)
{//信息已成功返回,开始处理信息
var xmlReturn = XMLHttpReq.responseText;
}else
{
window.alert("所请求的页面有异常");
}
}
}
function show2(goodsid)
{
document.all.ly2.style.display="block";
document.all.ly2.style.width=document.body.clientWidth+20;
document.all.ly2.style.height=document.body.clientHeight+20;
document.all.divTest2.style.display='block';
document.getElementById("divTest2").style.visibility="visible";
var url = "present.jsp?goodsid="+goodsid;
sendAjaxRequest(url);
window.alert(gid);
}
window.open('present.jsp?goodsid=<%=goodsid%>', '礼物详细信息', 'width=300, height=300, scrollbars=no');
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<%@ page import="java.sql.*"%>
<%@page import="db.*"%>
<%
request.setCharacterEncoding("GB18030");
//中午的 DB 没有放入包 也没引入 现在把代码 放入 db包 引入 代码忘记引DB文件了
//仔细看我的注释吧 可能是细节不清楚
//这里都是我自己的测试数据 我测试成功
String goodsid = "a001";
String goodsname = "初始化数据";
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<script type="text/javascript">
var xmlHttp;
function createXMLHttpRequest() {
//表示当前浏览器不是ie,如ns,firefox
if(window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
} else if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}
//function sendAjaxRequest(goodsid)
function sendAjaxRequest()
{
createXMLHttpRequest();
//ajax 要受缓存影响 "×tamp=" + new Date().getTime() 使得每次时间都不同 而不使用缓存内容
//注意这个url 我刚才拼错了几次 晕 function sendAjaxRequest(goodsid)这样传递参数我的报错 换个方法 我
var url ="present.jsp?goodsid=<%=goodsid%>×tamp=" + new Date().getTime();
xmlHttp.open("get",url,true);//我写的这个是true
xmlHttp.onreadystatechange = processResponse;//指定响应函数
xmlHttp.send(null);
}
function processResponse() {
if(xmlHttp.readyState==4) {
if(xmlHttp.status==200) {
//这里用innertHTML写入到<span id="reText"></span>
reText.innerHTML = "<font color='red'>" + xmlHttp.responseText + "</font>";
}else {
window.alert("所请求的页面有异常");
}
}
}
function show2(goodsid) {
//sendAjaxRequest(goodsid);
//window.open()是在新窗口 中显示信息
//window.open('present.jsp?goodsid=<//%=goodsid%>', '礼物详细信息', 'width=300, height=300, scrollbars=no');
//我想不清楚你说的调用show2()函数弹出一个层,在层中显示goodsid相对应的物品信息
//既然你要ajax要转向另一个页面present.jsp?goodsid="+goodsid 那么这个页面里面应该有 查询数据库的操作吧 查询礼物
//XMLHttpReq.open("get",url,false); 我用的是 xmlHttp.open("GET", url, true);
//function processResponse() 这个里面 你只是拿到了var xmlReturn = XMLHttpReq.responseText;
//而且这个信息也不知道 你是要显示在 哪个页面 还是显示在persont。jsp页面
}
</script>
<title>Insert title here</title>
</head>
<body>
<center>
<h1>这里是 原页面 我的 test2.jsp 页面</h1><br>
<%
//System.out.println("这是节日送礼语句");
String sql = "select item_no,item_name,spec,pattern from t_items where item_no=?";
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
conn = DB.getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, goodsid);
rs = pstmt.executeQuery();
if (rs.next()) {
goodsname = rs.getString("item_name");
System.out.println("数据库里面能够根据id查询出 一个礼物");
} else {
System.out.println("数据库根据id 查询 00000 个礼物");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
db.DB.closeResultSet(rs);
db.DB.closeStatement(pstmt);
db.DB.closeConnection(conn);
}
out.print(goodsname);
%>
<br>
<!-- 直接使用sendAjaxRequest() -->
<a href="javascript:;" onclick="sendAjaxRequest()" id="goods"><img
src="images/present/as1.gif" />
</a>
<h1>
<span id="reText"></span>
</h1>
<!--
这个地方应该就是你说的 用ajax 的异步处理从 ajax 处理完后返回的内容显示的地方把
如果你是想 点击show2()弹出一个页面出来 在上面显示礼物信息 那么就没有必要用AJax了 直接在
persent.jsp页面里面调用 通过传递过去的goodsid 数据库操作查询礼物资料把
使用 Ajax 的回调函数 可以使得 你查询物料的结果 返回来这个页面显示 而不是persent页面显示
//我在我电脑上已经测试成功那个能正确 返回数据 并显示
//window.open("") 还有 reText.innerHTML = "<font color='red'>" + xmlHttp.responseText + "</font>";
//我也就知道这2种方法了 不知道那个合适你 或者还有其他的方法
-->
</center>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<%@ page import="java.sql.*" %>
<%@ page import="db.*" %>
<%
request.setCharacterEncoding("GB18030");
String goodsid = request.getParameter("goodsid"); //这个是你传递过来的id 我现用固定的测试
//String goodsid = "001";
//我这里就不使用Manager管理了 直接使用原始数据库连接 不然麻烦 要写好多东西
String sql = "select item_no,item_name,spec,pattern from t_items where item_no=?";
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String goodsname = "初始化数据";
try{
conn = db.DB.getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,goodsid);
rs = pstmt.executeQuery();
if(rs.next()){
goodsname = rs.getString("item_name");
//测试成功后可以删除
System.out.println("数据库里面能够根据id查询出 一个礼物");
}else {
//测试成功后可以删除
System.out.println("数据库根据id 查询 00000 个礼物");
}
}catch(Exception e){
e.printStackTrace();
}finally{
db.DB.closeResultSet(rs);
db.DB.closeStatement(pstmt);
db.DB.closeConnection(conn);
}
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
<center>
<h1>Present 页面数据</h1><br>
goodsid:<%=goodsid%><br>
goodsname:<%=goodsname%><br>
</center>
</body>
</html>
数据库
| item_no | item_name | spec | pattern | category | unit |
| a001 | 维生素D | 蓝瓶 | ISO8859 | B03 | C01 |
结果
http://127.0.0.1:8080/message/test2.jsp
这里是 原页面 我的 test2.jsp 页面
维生素D
Present 页面数据
goodsid:a001
goodsname:维生素D
你看看把
function validate(field) {
if (trim(field.value) != "") {
createXMLHttpRequest();
var url="../servlet/ClientIdValidateServlet?clientId=" + field.value + "×tamp=" + new Date().getTime();
xmlHttp.open("GET", url, true);
xmlHttp.onreadystatechange=callback;
xmlHttp.send(null);
}else {
document.getElementById("resText").innerHTML = "";
}
}
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<%@ page import="java.sql.*" %>
<%
String goodsid="";
String goodsname="";
String goodsimage="";
int goodsmoney=0;
String id="";
if(request.getParameter("goodsid")==null)
{
goodsid="1";
}
if(request.getParameter("goodsid")!=null)
{
goodsid=request.getParameter("goodsid");
}
System.out.println("这是节日送礼语句"+"SELECT goodsname,goodsmoney,goodsimage FROM goods_info WHERE goodsid='"+goodsid+"'");
//db.executeQuery("getGoodsInfo","SELECT goodsname,goodsmoney,goodsimage FROM goods_info WHERE goodsid='"+goodsid+"'");
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
<!--
1、仔细分析你的原因 : 首先 你 说 你已经 成功 拿到 goodsid=request.getParameter("goodsid"); 已经拿到了 goodid 比如说现在是 3; 原来的是 1;
接下来的就是数据库查询了 很可能问题出现在这里 而且 你用的 是自己的 DB 数据库连接 我不太清楚
我给你写一个 简单 的 你区查询看 能查询出结果码 这个先放后面
而且 你后台打印的只是sytem.out.print()可以在后台打印出根据id而获取的值 id 而已 没有数据
2. 你说的页面 jsp 页面
是出现异常 报一大堆错误
还是 jsp页面 就是空白页 什么没有
如果是空白也 那么 就跟我想的一样了
if(db.next("getGoodsInfo"))//这个方法我不知道怎么回事 具体的不清楚 我帮你写的看看 也就是
换另一种形式
{
goodsname=db.getString("getGoodsInfo","goodsname");
goodsimage=db.getString("getGoodsInfo","goodsimage");
goodsmoney=db.getInt("getGoodsInfo","goodsmoney");
}
如果页面是空白 那么 是这样执行的 if(db.next("getGoodsInfo")) 并没有执行进去
要么是你数据库查询出错 或者 没有 查询结果 那么 db.next("getGoodsInfo")=false
out.print(goodsname); 你这个输出的 依旧是你在顶端 初始化时候的数据 String goodsname="";
很明显 是if(db.next("getGoodsInfo")) 没执行到里面 而是跳过了
3.现在首要问题是解决你 这个jsp 页面 的输出问题 是否输出正确结果 (你是说现在 你的 out.print(goodsname); 输出有问题)
是否是你的数据查询这里出现问题
4.ajax 问题我也不是很精通 ,如果你在其他地方使用通过 那么 也不会有什么技术方面问题
-->
<%
//我写的数据库连接 你要做的就是换我这个查询数据库 如果 能查出来 显示正确 那么就是 很明显了
String sql = "SELECT goodsname,goodsmoney,goodsimage FROM goods_info WHERE goodsid=?";
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try{
// DB.getConnection();//这里是拿到conn
conn = DB.getConnection();
pstmt = conn.prepareStatement(sql);
//goodsid 是上request 取出来的
pstmt.setString(1,goodsid);
rs = pstmt.executeQuery();
//按照id查出来的应该是一个结果 或者 要么 就没有
if(rs.next()){
goodsname=rs.getString("goodsname");
goodsimage=rs.getString("goodsimage");
goodsmoney=rs.getInt("goodsmoney");
//这里打3一句提示性语句 数据库查询结果 注意看后台提示
System.out.println("数据库里面能够根据id查询出 一个礼物");
}else {
//else 写出来是为了查看 数据库查询结果 注意看后台提示
System.out.println("数据库根据id 查询 00000 个礼物");
}
}catch(Exception e){
e.printStackTrace();
}finally{
DB.closeResultSet(rs);
DB.closeStatement(pstmt);
DB.closeConnection(conn);
}
//这个就是最后goodsname 的值 要么if(rs.next())执行了 要么 就是 String goodsname="";
out.print(goodsname);
// 我建议你还是 把 结果 是放在 ResultSet 这样明显
//你还是现用这个数据库连接检查下看看
//你的那个结果 表示 没有 DB。java 我还是看不明白
//你同样可以把这个方法封装到java文件 调用就行 返回结果大jsp页面就可以
//这个只是大概思路了
// 希望继续提问
//我要找时间看看ajax 那里的代码 ,找你说的意思 还没有到ajax 那里出错 ,下午还要忙一端时间 要晚上 9点才能上网~
%>
</body>
</html>
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DB {
/**
* 拿到MySql数据库连接
* * 不要忘记把数据库连接的jar 包引进
* @return
*/
public static Connection getConnection() {
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
// 数据库 名称和 密码 用户名自己写
conn = DriverManager.getConnection
("jdbc:mysql://localhost:3306/XXX?user=root&password=XXX");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
System.out.println("连接数据库失败");
e.printStackTrace();
}
return conn;
}
/**
* 关闭数据连接conn
* @param conn
*/
public static void closeConnection(Connection conn) {
if(conn != null) {
try {
conn.close();
conn = null;
} catch (SQLException e) {
System.out.println("关闭数据库连接出错");
e.printStackTrace();
}
}
}
/**
*
* 关闭数据连接stmt
* @param stmt
*/
public static void closeStatement(Statement stmt) {
if(stmt != null) {
try {
stmt.close();
stmt = null;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
*
* 关闭数据连接rs
* @param rs
*/
public static void closeResultSet(ResultSet rs) {
if(rs != null) {
try {
rs.close();
rs = null;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}