AJAX实现导航式多条件搜索

导航式搜索在实际网站开发中有很多应用,其实现原理也不复杂,关键是如何记忆所选的条件。常见的方式有存入session、存入数组等。本文采用的是AJAX+数组的方式,在不跳转,不刷新整个页面的条件下动态返回查询结果。

效果图如下:

1.search.jsp

通过将所选的查询条件存入数组,通过AJAX传到后台,这样在后台利用所得到的查询条件,就可以到数据库进行查询了。代码如下:

<%@ page language="java"  import="java.util.List;" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<link rel="stylesheet" rev="stylesheet" href="css/web.css" type="text/css" media="all" />

<title>Insert title here</title>

<script type="text/javascript" src="js/jquery.js"></script>

<script type="text/javascript">

var xmlHttp;

function createXmlHttpRequest() {

if (window.ActiveXObject) {

xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

} else if (window.XMLHttpRequest) {

xmlHttp = new XMLHttpRequest();

}

}

//回调

function handleStateChange() {

if (xmlHttp.readyState == 4) {

if (xmlHttp.status == 200) {

parseResults();

}

}

}

//将后台返回的数据显示在层content中

function parseResults() {

document.getElementById("content").innerHTML=xmlHttp.responseText;//将返回的请

求文本Text写入指定的DIV中

}

</script>

<script type="text/javascript">

var req;

var searchChar = new Array();

for(var i=0;i<3;i++){

searchChar[i]=0;

}

function bb(num,con){

switch(num){

case 0: searchChar[0]=con;

break;

case 1: searchChar[1]=con;

break;

case 2: searchChar[2]=con;

break;

}

for(var i=0;i<13;i++){   //解决选中字段显示颜色的问题

var region1 = "0" + i;

document.getElementById(region1).style.color="black";

}

for(var i=0;i<5;i++){

var type1 = "1" + i;

document.getElementById(type1).style.color="black";

}

for(var i=0;i<5;i++){

var price1 = "2" + i;

document.getElementById(price1).style.color="black";

}

var region="0"+searchChar[0];

document.getElementById(region).style.color="red";

var type="1"+searchChar[1];

document.getElementById(type).style.color="red";

var price="2"+searchChar[2];

document.getElementById(price).style.color="red";

var url = "BuildingServlet";

createXmlHttpRequest();

xmlHttp.open("POST", url, true);

xmlHttp.onreadystatechange = handleStateChange;//回调

xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;text/xml;charset=utf-8"); //text/xml;charset=utf-8:可以解决汉字封装json问题

xmlHttp.send("searchChar="+searchChar);

}

</script>

</head>

<body class="home">

<div id="search">

<p>区域:

<a id="00" href="javascript:void(0);" onclick="bb(0,00)">全部</a>

<a id="01" href="javascript:void(0);" onclick="bb(0,01)">市南</a>

<a id="02" href="javascript:void(0);" onclick="bb(0,02)">市北</a>

<a id="03" href="javascript:void(0);" onclick="bb(0,03)">李沧</a>

<a id="04" href="javascript:void(0);" onclick="bb(0,04)">崂山</a>

<a id="05" href="javascript:void(0);" onclick="bb(0,05)">城阳</a>

<a id="06" href="javascript:void(0);" onclick="bb(0,06)">黄岛</a>

<a id="07" href="javascript:void(0);" onclick="bb(0,07)">即墨市</a>

<a id="08" href="javascript:void(0);" onclick="bb(0,08)">胶州市</a>

<a id="09" href="javascript:void(0);" onclick="bb(0,09)">胶南市</a>

<a id="010" href="javascript:void(0);" onclick="bb(0,10)">平度市</a>

<a id="011" href="javascript:void(0);" onclick="bb(0,11)">莱西市</a>

<a id="012" href="javascript:void(0);" onclick="bb(0,12)">其他</a></p>

<p>户型:

<a id="10" href="javascript:void(0);" onclick="bb(1,0)">全部</a>

<a id="11" href="javascript:void(0);" onclick="bb(1,1)">住宅</a>

<a id="12" href="javascript:void(0);" onclick="bb(1,2)">商用</a>

<a id="13" href="javascript:void(0);" onclick="bb(1,3)">办公</a>

<a id="14" href="javascript:void(0);" onclick="bb(1,4)">其他</a></p>

<p>价格:

<a id="20" href="javascript:void(0);" onclick="bb(2,0)">全部</a>

<a id="21" href="javascript:void(0);" onclick="bb(2,1)">6000以下</a>

<a id="22" href="javascript:void(0);" onclick="bb(2,2)">6000--8000</a>

<a id="23" href="javascript:void(0);" onclick="bb(2,3)">8000--12000</a>

<a id="24" href="javascript:void(0);" onclick="bb(2,4)">12000以上</a></p>

</div>

<div id="content" class="content">

<table width="742">

<tr>

<td>楼盘名</td>

<td>区域</td>

<td>户型</td>

<td>价格</td>

</tr>

</table>

</div>

</body>

<script type="text/javascript">

document.getElementById("00").style.color="red";

document.getElementById("10").style.color="red";

document.getElementById("20").style.color="red";

</script>

</html>

2.BuildingServlet.java

得到jsp页面传来的数组,并解析得到对应的条件,调用相关的方法得到查询结果,并将结果返回给前台。

packagecom.realty.servlet;
importjavax.servlet.ServletException;
importjavax.servlet.annotation.WebServlet;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjavax.swing.JOptionPane;
importcom.realty.base.model.*;
importcom.realty.base.action.BuildingAction;
/**
* Servlet implementation class BuildingServlet
*/
@WebServlet("/BuildingServlet")
publicclassBuildingServlet extendsHttpServlet {
privatestaticfinallongserialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
publicBuildingServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protectedvoiddoGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {
// TODO Auto-generated method stub
doPost(request,response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protectedvoiddoPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("utf-8");
response.setHeader("Cache-Control", "no-store");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("text/html;charset=UTF-8");//解决乱码问题,没有这句,回调函数的内容可能乱码
String searchcharg = request.getParameterValues("searchChar")[0].trim();//得到jsp页面数组的内容,但是以String形式。
String[] searchchars = searchcharg.split(",");
int[] searchchar = { 0, 0, 0, 0}; //切分String,将各个值存入新数组中。
//String to int
for(inti = 0; i < searchchars.length; i++) {
searchchar[i] = Integer.parseInt(searchchars[i]);
}
BuildingAction buildingaction=newBuildingAction();//根据jsp页面传来的每个条件的值,即可编写相应类查询出对应的结果。
List<Building> result=buildingaction.buildingSearch(searchchar[0], searchchar[1], searchchar[2]);
if(result.size()>0){
out.println("<table width=‘742‘>"); //将结果返回给jsp页面
out.println("<tr>"
+ "<td>楼盘名</td>"
+ "<td>区域</td>"
+ "<td>户型</td>"
+ "<td>价格</td>");
out.println("</tr>");
for(inti=0;i<result.size();i++){
out.println("<tr>"
+ "<td><span>"+result.get(i).getBuildingName()+"</span> </td>"
+ "<td><span>"+result.get(i).getRegionId()+"</span></td>"
+ "<td><span>"+result.get(i).getUsageId()+"</span></td>"
+ "<td><span>"+result.get(i).getAveragePrice()+"</span></td>"
+"</tr>");
}
out.println("</table>");
out.close();
}
else{
out.println("<table width=‘742‘>"
+"<tr>"
+" <td> <span>没有相应信息 </span></td>"
+"</tr>"
+"</table>");
out.close();
}
}
}

AJAX实现导航式多条件搜索,布布扣,bubuko.com

时间: 2024-10-13 00:29:19

AJAX实现导航式多条件搜索的相关文章

Lucene系列:(10)多条件搜索 QueryParser

1.什么是条件搜索 用关健字与指定的单列或多例进行匹配的搜索 2.单字段条件搜索 QueryParser queryParser = new QueryParser(LuceneUtils.getVersion(),"content",LuceneUtils.getAnalyzer()); 3.多字段条件搜索,项目中提倡多字段搜索 QueryParser queryParser = new MultiFieldQueryParser(LuceneUtils.getVersion(),n

列表页的动态条件搜索

在我是如何做列表页的,我提到了列表页的动态条件搜索,主要的目的就是在View中能够动态的指定条件,而后端的数据查询逻辑尽量不变.之前在搞.net的时候,我们可以借助强大的ExpressionTree来解决,之前有一篇是微软的EntityFramework表达式转换:Linq to Entity经验:表达式转换,是将一种表达式转换成数据库组件能够识别的表达式,只不过那篇没有涉及到View中的条件而已.页面动态查询的最简单的方法就是解析View中特定的值来得到后台组件能够识别的查询逻辑.    我们

CI框架增加条件搜索,分页

在网上找了半天,没有一个能写明白的,到的怎么使用带条件分页,我这里用简单说明实现它! 1.使用CI框架分页类,如果带搜索条件,首先要可以接收搜索内容 $cateid = $this->input->get_post('select_cate'); $searchkey = $this->input->get_post('searchkey'); $offset = $this->input->get_post('per_page'); 2.实现搜索分页代码 $this-

【AmazeUI】各种的导航式菜单与解决方法

与Bootstrap一样,AmazeUI提供的导航式菜单也是喜欢蜷缩在右上角的一个按钮里面,然后一点击就向下拉开一大段距离.这样很不友好.此前<[AmazeUI]手机版页面的顶部导航条Header与侧边导航栏offCanvas>(点击打开链接)是一种解决方案,但是对于一些不使用页面的页面,这种方案则无能无力. 对于此有如下的几种方案可以解决: 一.改造AmazeUI提供的手机端文字横排菜单 AmazeUI提供的手机端文字横排菜单的背景颜色是白色的,字体是蓝色的,没有提供相应的class去改写里

多条件搜索问题 -sql拼接与参数化查询

来源:传智播客  免费开发视频. 问题:根据书名或出版社或作者查询书籍信息. using System; using System.Collections.Generic问题; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClie

SQL Server通过条件搜索获取相关的存储过程等对象

在SQL Server中,我们经常遇到一些需求,需要去搜索存储过程(Procedure).函数(Function)等对象是否包含某个对象或涉及某个对象,例如,我需要查找那些存储过程.函数是否调用了链接服务器(LINKED SERVER),我们如果从sys.sql_modules去搜索的话,如果有多个用户数据库,需要切换数据库,执行多次SQL语句.这些都是非常麻烦的事情.本着"模块化定制脚本,减少重复工作量"的原则.写了一个脚本find_prc_from_src_txt.sql, 以后在

全字段多条件搜索(api接口)

近期在做项目时遇到了一个全表全字段多条件搜索的需求,在平时搜索最常见的就是 字段+like +‘% 条件%’这种模式,但遇到多条件多字段时,这种就不适用了. 表字段已知,条件未知,条件数量未知,这种情况我们不可能每多一个条件就加一个and. 解决办法: 先将用户输入的条件存入一个数组中,例如以空格隔开的条件: String[] strArr = SearchText.Split(" "); 进行循环遍历数组中的条件进行sql拼接 for(int i =0;i<strArr.Len

【转】仿Android 联系人SideBar排序,根据拼音A-Z字母快速导航,以及输入搜索条件过滤,显示姓名的文字图片

1.首先我们把这几个工具类拷贝到自己的项目中,这些都是很常见的类: CharacterParser       –这是用来把中文转成拼音的工具类 PinyinComparator   –拼音首字母的比较器 SideBar                    –右侧的竖条,显示的是二十六个字母以及*,和#号 SortModel               –放排序name和key的bean 1 public class CharacterParser { 2 private static int

JavaScript AJAX stream 流式显示

当使用AJAX进行信息交互的时候,如果服务器返回的信息比较大,那么相对于传送完成之后的统一显示,流式显示就比较友好了. 流式实现 原理就是设置定时器,定时的查看AJAX对象的状态并更新内容,如果传送完成,就取消定时器. function ajax_stream(url,data,element) { var xmlHttp=null; if (window.XMLHttpRequest) {// code for IE7, Firefox, Opera, etc. xmlHttp=new XML