知道美河 | 上传资料 | VIP申请 | 精品课程 | 资料搜索 | 问题反馈 | 会员手册 | 积分消费 | 积分充值 | 帐号保护
美河学习学习在线赞助VIP

美河学习在线(主站) eimhe.com

 找回密码
 建立账号
查看: 8399|回复: 5

[求助] 又是ajax的问题

[复制链接]
发表于 2007-2-5 22:23:55 | 显示全部楼层 |阅读模式
HTML源代码
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<html>
  <head>
    <title>article.html</title>
  <script type="text/javascript" src="js/common.js"></script>
  <script type="text/javascript">
  var completeDiv;
  var inputField;
  var nameTable;
  var nameTableBody;
  function initVars() {
     inputField = document.getElementById("title");            
     nameTable = document.getElementById("name_table");
     completeDiv = document.getElementById("popup");
     nameTableBody = document.getElementById("name_table_body");
     
  }

  function findNames(){
   initVars();
   if (inputField.value.length > 0) {
       createXMLHttpRequest();  
       var url = "article.do?method=search&title="+encodeURI(inputField.value);   
       xmlHttp.open("GET", url, true);
       xmlHttp.onreadystatechange = callback;
       xmlHttp.send(null);
    } else {
       clearNames();
    }
  }
  function callback() {
            if (xmlHttp.readyState == 4) {
                if (xmlHttp.status == 200) {
               
                    var name = xmlHttp.responseXML.getElementsByTagName("title")[0].firstChild.data;
                    setNames(xmlHttp.responseXML.getElementsByTagName("title"));
                } else if (xmlHttp.status == 204){
                    clearNames();
                  
                }
            }
        }
        
        function setNames(the_names) {            
            clearNames();
            var size = the_names.length;
            setOffsets();

            var row, cell, txtNode;
            for (var i = 0; i < size; i++) {
                var nextNode = the_names.firstChild.data;
                row = document.createElement("tr");
                cell = document.createElement("td");
               
                cell.onmouseout = function() {this.className='mouseOver';};
                cell.onmouseover = function() {this.className='mouseOut';};
                cell.setAttribute("bgcolor", "#FFFAFA");
                cell.setAttribute("border", "0");
                cell.onclick = function() { populateName(this); } ;                             

                txtNode = document.createTextNode(nextNode);
                cell.appendChild(txtNode);
                row.appendChild(cell);
                nameTableBody.appendChild(row);
               
            }
        }

        function setOffsets() {
            var end = inputField.offsetWidth;
            var left = calculateOffsetLeft(inputField);
            var top = calculateOffsetTop(inputField) + inputField.offsetHeight;

            completeDiv.style.border = "black 1px solid";
            completeDiv.style.left = left + "px";
            completeDiv.style.top = top + "px";
            nameTable.style.width = end + "px";
        }
        
        function calculateOffsetLeft(field) {
          return calculateOffset(field, "offsetLeft");
        }

        function calculateOffsetTop(field) {
          return calculateOffset(field, "offsetTop");
        }

        function calculateOffset(field, attr) {
          var offset = 0;
          while(field) {
            offset += field[attr];
            field = field.offsetParent;
          }
          return offset;
        }

        function populateName(cell) {
            inputField.value = cell.firstChild.nodeValue;
            clearNames();
        }
  function clearNames() {
     var ind = nameTableBody.childNodes.length;
     for (var i = ind - 1; i >= 0 ; i--) {
       nameTableBody.removeChild(nameTableBody.childNodes);
     }
    completeDiv.style.border = "none";
  }
  </script>
  </head>
  
  <body>
    <h3>Ajax Auto Complete Example</h3>
    请输入名称:<input type="text" name="title" id="title" size="30" width="100" height="20" onkeyup="findNames();">
    <div style="position:absolute;" id="popup">
        <table id="name_table" bgcolor="#FFFAFA" border="0" cellspacing="0" cellpadding="0"/>            
            <tbody id="name_table_body"></tbody>
        </table>
    </div>
  </body>
</html>

Action源代码
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.rain.struts.action;

import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;

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 org.apache.struts.validator.DynaValidatorForm;

import com.rain.bean.ArticleDao;

/**
* MyEclipse Struts
* Creation date: 09-12-2006
*
* XDoclet definition:
* @struts.action parameter="method"
*/
public class ArticleAction extends DispatchAction {
/*
  * Generated Methods
  */

/**
  * Method execute
  * @param mapping
  * @param form
  * @param request
  * @param response
  * @return ActionForward
  */
public ActionForward search(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {
  DynaValidatorForm articleForm = (DynaValidatorForm)form;
  String title;
  try {
   title = new String(request.getParameter("title").getBytes("ISO8859_1"),"UTF-8");
   System.out.println(title);
   ArticleDao dao=new ArticleDao();
   
   Iterator it=dao.findAllName(title).iterator();
   
   if(it.hasNext()){
    PrintWriter out;
    try {
     
     response.setContentType("text/xml;charset=UTF-8");
     response.setHeader("Cache-Control", "no-cache");
     out = response.getWriter();
     out.println("<response>");
     while(it.hasNext()){
      String name=it.next().toString();
      out.println("<title>"+name+"</title>");
     }
     out.println("</response>");
     it=null;
     out.close();
    } catch (IOException e) {
     // TODO 自动生成 catch 块
     e.printStackTrace();
    }
   
   }else{
    response.setStatus(HttpServletResponse.SC_NO_CONTENT);
   }
  } catch (UnsupportedEncodingException e1) {
   // TODO 自动生成 catch 块
   e1.printStackTrace();
  }
  
  
  return null;
}
}


Dao源代码
/**
*@type_name: ArticleDao
*@date: 2006-9-13
*@author scott_zhou
*/
package com.rain.bean;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.rain.HibernateSessionFactory;

/**
*
*/
public class ArticleDao {

public List findAllName(String title){
  System.out.println("11");
  String hql="select art.title from Article art where art.title like '"+title+"%'";
     List list=null;
     try{
      
      Session session=HibernateSessionFactory.getCurrentSession();

         Transaction tx=session.beginTransaction();
          Query query=session.createQuery(hql);
            
            list=query.list();
            tx.commit();
            session.close();
     }catch(Exception e){
      System.out.println(e.getMessage());
      e.printStackTrace();
     }
        
        return list;
}
}


是个无刷新的搜索..但没效果.不知道问题出在哪..
发表于 2007-2-6 08:40:25 | 显示全部楼层
  代码不全。没办法在不运行的情况下调试Ajax。
一般这种问题都出现在javascript上。。

要么就重新写一遍javascript,要么把代码给我发一份我得运行起来才能调试差错。
发表于 2007-2-6 11:14:36 | 显示全部楼层
 楼主| 发表于 2007-2-6 11:34:11 | 显示全部楼层
应该是少了 <script type="text/javascript" src="js/common.js"></script>
这段代码 ..楼上的能不能写一个啊 .
发表于 2007-2-6 13:58:21 | 显示全部楼层
<script type="text/javascript" src="scripts/showPic.js"></script>
你是这个意思不?
 楼主| 发表于 2007-2-6 19:46:32 | 显示全部楼层
您需要登录后才可以回帖 登录 | 建立账号

本版积分规则

 
QQ在线咨询

QQ|小黑屋|手机版|Archiver|美河学习在线 ( 浙网备33020302000026号 )

GMT+8, 2025-5-7 15:29

Powered by Discuz!

© 2001-2025 eimhe.com.

快速回复 返回顶部 返回列表