Ajax实现三级联动
两天时间用AJAX写了个无限级的多级联动菜单(ajax+PHP构架)
花了两天时间。
研究AJAX,终于独立完成一个无限组的多级菜单联动功能。
主要特点:就是HTML静态页面可以无刷新的与PHP动态角本文件及数据库交互(这也是AJAX的核心目的)。
以下把代码贴出来。
供大家参考指正:ajax.js文件(位于根目录下js子目录)var xmlHttp;function createXmlHttp(){if(window.XMLHttpRequest){xmlHttp=new XMLHttpRequest();}else{xmlHttp=new ActiveXObject("Microsoft.XMLHttp");}}basic_inc.php(位于根目录下/include子目录下)<?php$DB_SERVER="localhost";$DB_NAME="ajax";$DB_USER="root";$DB_PASSWORD="";?>conn.php(位于根目录下/include子目录下)<?phprequire_once("dir_inc.php");require_once($ROOT_DIR."include/basic_inc.php");@ $db=mysql_connect($DB_SERVER,$DB_USER) or die ("faile!".mysql_error());@mysql_select_db($DB_NAME);?>dir_inc.php(位于根目标下/include子目录下)<?php$ROOT_DIR="../";?>select_menu.html(位于根目录下是核心前台文件)<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>select_menu</title><script type="text/javascript" src="js/ajax.js">//这里引用创建xmlHttp对像的文件(对浏览器做过判断)</script><script type="text/javascript">var targetSelId; //申明一个全局变量用来存放当前要操作的对像的IDvar selArray;//申明一个全局数组。
thinkphpjquery与ajax实现省市区三级联动菜单
题目:thinkphp jquery与ajax实现省市区三级联动菜单thinkphp jquery与ajax实现省市县三级联动菜单本示例以省市区三级联动菜单为例:实现步骤:第一:先默认从数据库中读取所有的省份。
第二:通过jquery中的change事件,当省份的内容发生改变时,执行change事件,通过jquery 获得被选中的省份的value值,再后通过异步加载数据。
第三:与第二步相似,当用户选择城市时,会触发change事件,通过jquery 获得被选中的城市的value值,再次进行异步加载数据。
具体示例代码如下:RecruitmentAction.class.phpclass RecruitmentAction extends Action{public function chacity(){$code=I(post.code$city=M(where(array(provincecode$code))-select();echo "option value=请选择城市/optionif($city){foreach($city as $c){echo "option value=".$c[".$c[/optionpublic function chaarea(){ $code=I(post.code$area=M(where(array(citycode$code))-select();echo "option value=/optionif($area){foreach($area as $a){echo "option value=".$a[".$a[/optionpublic function chacitydefault(){ $code=I(post.code$city=M(where(array(provincecode$code))-select();if($city){foreach($city as $c){echo "option value=".$c[".$c[public function chaareadefault(){$code=I(post.code$area=M(where(array(citycode$code))-select();if($area){foreach($area as $a){echo "option value=".$a[".$a[/optionsendrecruitment.phpmeta charset="utf-8"/title省市县三级联动菜单/tiltescirpt src="/jquery/1.11.1/jquery.min.js"script$(function(){#sheng).change(function(){ var code=$(#sheng option:selected ).val();$.post(__URL__/chacity:code},function(data){ #city).html(data);#city).change(function(){ var code=$(#city option:selected ).val();$.post(__URL__/chaarea:code},function(data){).html(data);var code=$(#sheng option).eq(0).val();$.post(__URL__/chacitydefault:code},function(data){#city).html(data);var areacode=110100; $.post(__URL__/chaareadefault :areacode},function(data){ #area).html(data);/script/head$m=M(province$p=$m-id ascselect();input type="text" name="jobplace" value="" /select name="job_province" id="sheng" style="width:100px;"if($p){foreach($p as $v){option value="php echo $v[php echo $v[/option/selectselect name="job_city" id="city" style="width:100px;"/selectselect name="job_area" id="area" style="width:100px;"/select/body/html注:本示例中,控制器部分:chacitydefault(),chaareadefault()方法是为了默认页面加载时,执行一次,让省,市,与区进行显示。
DWR实现省市县三级联动 - DWR - AJAX
然后在web.xml的同目录下,创建一个dwr.xml,配置如下:
/post/354281?page=1(第 1/9 页)[2008/3/7 17:12:43]
DWR实现省市县三级联动 - DWR - AJAX - JavaEye论坛
Java代码 1. 2. 3. 4. 5. 6. 7. 8. 9. <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 0.4//EN" "/ dwr/dwr.dtd"> <dwr> <allow> <create creator="new" javascript="province"> <param name="class" value="com.xinli.struts.service.ProvinceService"/> </create> </allow> </dwr>
DWR实现省市县三级联动 - DWR - AJAX - JavaEye论坛
前段时间想学习学习DWR,在网上查找资料无数,没有见到一个现成的例子可以参阅一下,郁闷无比,罢了,还是 自己动手,丰衣足食吧! 本例子是由MySQL数据库,结合前台使用Struts来完成的.主要是为了说明DWR的使用,所以对于数据库的设计等 等都较简单,大家觉得那里有什么不合理之处请给我留言!数据库创建的脚本在附件里面. 数据库的大概设计是,共有三个字段[id,name,parentid],顾名思义,id就是唯一标示一条记录,name存放的是省 市县的名称,parentid存放的其上级的id,例如对于省一级别的,其parentid全部为0,对于市一级别的,其parentid 存放的是所对应省的id,对于县一级别的,其parentid存放的是所对应市的id. 首先在进入显示页面的时候就把所有的parentid=0的全部查出来,初始化进入省所在的下拉列表中,然后根据选择 省的下拉列表,通过DWR调用java方法将其所对应的市取出来,以此类推…… 这里主要需要说明的是在web.xml里面需要配置如下:
jQuery实现简单三级联动效果
jQuery实现简单三级联动效果本⽂实例为⼤家分享了jQuery实现简单三级联动的具体代码,供⼤家参考,具体内容如下⾸先写⼀个JSON数据[{"province": "吉林省","cities": [{"city": "长春市","counties": ["朝阳区", "经济开发区", "⾼新区"]},{"city": "吉林市","counties": ["东城区", "经济开发区", "⽼城区"]},{"city": "⽩⼭市","counties": ["⼆道区", "河东区", "⾼新区"]}]},{"province": "辽宁省","cities": [{"city": "沈阳市","counties": ["朝阳区", "经济开发区", "⾼新区"]},{"city": "⼤连市","counties": ["东城区", "经济开发区", "⽼城区"]},{"city": "铁岭市","counties": ["⼆道区", "河东区", "⾼新区"]}]},{"province": "⼭东省","cities": [{"city": "青岛市","counties": ["朝阳区", "经济开发区", "⾼新区"]},{"city": "济南市","counties": ["东城区", "经济开发区", "⽼城区"]},{"city": "威海市","counties": ["⼆道区", "河东区", "⾼新区"]}]}]然后⽤Ajax动态获取JSON⽂件中的数据完整代码<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>三级联动</title></head><body><!-- 三级联动 - 两个⼆级联动 --><select id="province"><option value="">---</option></select><select id="city"><option value="">---</option></select><select id="county"><option value="">---</option></select><script src="js/jquery-1.12.4.js"></script><script src="../js/createXMLHttpRequest.js"></script><script>var $province = $("#province");var $city = $("#city");var $county = $("#county");var json;$.getJSON("data/server1.json", function (data) {// 把data保存到json全局变量中json = data;// 遍历data数据$.each(data, function (index, obj) {// 获取所有的省份信息var provinceName = obj.province;// console.log(provinceName);// 将省份信息添加到对应的select元素中$province.append(`<option value="${provinceName}">${provinceName}</option>`);});$province.change(function () {// 将城市下拉列表的选项清空$city.empty();$city.append(`<option value="">---</option>`);// 获取到所选择的城市的⽂本信息var provinceElementName = $(this).children("option:selected").text();// console.log(provinceElementName);$.each(json, function (index, obj) {var provinceName = obj.province;// console.log(provinceName);if (provinceElementName === provinceName) {// 获取到城市数组集合var cities = obj.cities;// 遍历城市数组集合$.each(cities, function (index, obj) {// console.log(obj.city);// 获取到城市名称var cityName = obj.city;// 将该省对应的城市名称添加到对应的select中$city.append(`<option value="${cityName}">${cityName}</option>`);});}});});$city.change(function () {// 将区级下拉列表的选项清空$county.empty();$county.append(`<option value="">---</option>`);// 获取到所选择的城市的⽂本信息var cityElementName = $(this).children("option:selected").text();// console.log(cityElementName);$.each(json, function (index, obj) {// 获取该省对应的所有的城市信息var cities = obj.cities;// console.log(cities);$.each(cities, function (index, cityObj) {// console.log(cityObj.city);var cityName = cityObj.city;if (cityElementName === cityName) {// 获取到区级数组集合// console.log(cityObj.counties);var counties = cityObj.counties;// 遍历区级数组集合$.each(counties, function (index, value) {// 获取到区级名称// console.log(value);// 将该城市对应的区级名称添加到对应的select元素中$county.append(`<option value="${value}">${value}</option>`);});}});});});});</script></body></html>效果如下以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
PHP+Ajax三级联动菜单
PHP+Ajax三级联动菜单PHP+Ajax 三级联动菜单PHP+Ajax实例+注释演示2009-08-26 13:01一.使用ajax有以下固定步骤:1, 从页面触发Ajax的操作.2, 定义创建XMLHttpRequest对象的方法(建立一个XMLHttpRequest对象),也是就var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");//根据浏览器的不同有差异3, 然后建立一个函数,用来指定载入的数据来源!3.1,使用open方法打开数据来源(也就是我们要传入参数到DB查询的信息),但不意味着一定要发送数据显示!3.2,用onreadystatechange来指定数据装载的方式.(onreadystatechange是一个异步响应事件,就是因为它,ajax才那么完美.onreadystatechange事件中可以接收到服务器传回来的数据,通过分析和利用这些数据从而完成客户端的相应操作,onreadystatechange中的第三个参数你设为true,表示启用xmlHttp的异步通讯模式,这时你发出send命令后,浏览器还可以进行其它操作,如果设为false,浏览器就会进入无响应状态,直到xmlHttp接收完毕服务器传回的数据)3.3,使用send发送数据!4, 处理Ajax回传的数据(xml或text类型),使数据能按你的意愿现实在客户端.5, 回显到页面给用户.二,在网上看了一些资料,自己修改后,小小的整理主要出核心代码+精彩注释,全部贡献:index.php 客户端显示,包括执行AJAX的过程data.php 数据处理,查询数据,并回显/*************************index.php**********************/<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><!-------------------------------------------------------------- --省的字段是:province--市的字段是:city--县的字段是:area---------------------------------------------------------------------------><script type="text/javascript">/*********定义创建XMLHttpRequest对象的方法***************************************/var xmlHttp;//声明变量var requestType="";//声明初始类型为空function createXMLHttpRequest()//定义创建一个跨浏览器函数的开头{if(window.ActiveXObject)//ActiveXObject对象到找到的时候返回的是真,否则是假{xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");//这个是使用IE的方法创建XmlHttp}else if(window.XMLHttpRequest){xmlHttp=new XMLHttpRequest();//这个是使用非IE的方法创建XmlHttp}}/****************判断服务器响应的事件,如果返回是4则说明交互完成,判断标示头,**************************************************/function handleStateChange(){//判断返回的一个函数,来确定执行那个的函数if(xmlHttp.readystate==4){//4说明是执行交互完毕0 (未初始化)1 (正在装载)2 (装载完毕) 3 (交互中)4 (完成)if(xmlHttp.status==200){//http的一个报头说明成功找到if(type=="city"){//判断查询的类型showcity();//返回响应的显示}else if(type="area"){//判断响应的查询的类型showarea();//返回响应的显示}}}}/**************************城市的一个查询函数**********************************************************/function queryCity(citycode){//执行程序查询,查询城市的eval("document.form1.city.length=0;");//eval检查JScript 代码并执行.eval("document.form1.city.options.add(new Option('请选择城市','-1'));");createXMLHttpRequest();//调用创建XmlHttp的函数type="city";//表示类型,查询城市处理显示的时候需要用到varurl='data.php?provincecode='+citycode+'&n='+Math.random() ;//设定URL传值方法同时防止缓存xmlHttp.open("GET",url,true);//建立服务器连接,异步传输truexmlHttp.onreadystatechange=handleStateChange;//处理这个响应所需要的函数xmlHttp.send(null);//执行程序函数这里的中间的参数是因为GET原因}/**********************县区的一个查询函数***********************************************************/function queryArea(citycode){//查询程序eval("document.form1.area.length=0;");//eval检查 JScript 代码并执行.eval("document.form1.area.options.add(new Option('请选择县市','-1'));");createXMLHttpRequest();//调用创建XmlHttp的函数type="area";//查询县的varurl="data.php?citycode="+citycode+'&n='+Math.random();//设定URL传值方法同时防止缓存xmlHttp.open("GET",url,true);xmlHttp.onreadystatechange=handleStateChange;//处理响应的函数名xmlHttp.send(null);//执行程序函数这里的中间的参数是因为GET原因}/*********************一个显示函数*********************/function showcity(){//显示函数var a = xmlHttp.responseText.split('-');n = a.length;var aa = new Array();for(var i=0;i<n;i++){aa = a[i].split('**');eval("document.form1.city.options.add(newOption(aa[1],aa[0]));");//eval检查 JScript 代码并执行.}}function showarea(){var a = xmlHttp.responseText.split('-');n = a.length;var aa = new Array();for(var i=0;i<n;i++){aa = a[i].split('**');eval("document.form1.area.options.add(newOption(aa[1],aa[0]))");}//document.getElementById("area").innerHTML=xmlHttp.re sponseText;//捕获ID显示返回的数据}</script></head><body><?php$conn = mysql_connect("localhost","root","3661000");//链接数据库mysql_select_db("novel");//选择数据库mysql_query("set names 'utf8'");//设定字符集$sql = "select * from province";//查询数据库province表也就是省$result = mysql_query($sql);//执行语句赋值给变量><form name="form1"><!--输出表单头--><!--输出下拉列表框,并设定onchange响应事件,把省值传递过去--><select id='province' onchange='queryCity(this.options[this.selectedIndex].value)'> <!--输出下拉列表项值--><option value='-1' selected>请选择省份</option><?phpwhile($row=mysql_fetch_row($result)){//循环循环查询显示省输出数据显示echo "<option value='$row[1]'>$row[2]</option>\n";}></select><!--下拉列表项尾数--><select name="city" onchange="queryArea(this.options[this.selectedIndex].value)"></select> <!--显示数据的城市的位置--><select name="area"></select><!--显示数据的城市的位置--> </form><!--表单项结尾--></body></html>/***************data.php*****************/<?php$provincecode = $_GET['provincecode'];//接收省键值$citycode = $_GET['citycode'];//接收城市键值$conn = mysql_connect("localhost","root","3661000");//连接主机mysql_select_db("novel");//选择数据库mysql_query("set names 'utf8'");if($provincecode!=""){//如果传递过来的不为空则执行$sql = "select * from city where provincecode=$provincecode";//查询城市符合属于上边传递过来的省的字段$result = mysql_query($sql);//执行SQL查询语句while($row=mysql_fetch_row($result)){//循环记录集$xml .= $row[1]."**".$row[2]."-";}}if($citycode!=""){$sql = "select * from area where citycode=$citycode";$result = mysql_query($sql);while($row = mysql_fetch_row($result)){$xml .=$row[1]."**".$row[2]."-";}}$xml = substr($xml,0,strlen($xml)-1);//消掉最后的"-"echo $xml; //返回数据做回显。
mysqlphpajax使用jsonp跨域完成省市三级联动
mysqlphpajax使⽤jsonp跨域完成省市三级联动mysql php ajax 使⽤jsonp跨域完成省市三级联动mydb.sql⽤到了area,city,province 三个表cont.php 连接数据库data2.php 得到前端传过来的值,处理SQL语句,输出内容。
因为使⽤jsonp⽅式,就是输出函数名⾥⾯加上参数就可以了。
ajax的跨域问题可以看我ajax的⽂章<?phprequire_once('cont.php');$code = $_GET['citycode'];$callback = $_GET['callback'];$flag = $_GET['flag'];if($flag == 1){$retval= mysqli_query($conn,"select * from province order by id");}else if($flag == 2){$retval= mysqli_query($conn,"select * from city where provincecode = '".$code."' order by id" );}else if($flag == 3){$retval= mysqli_query($conn,"select * from area where citycode = '".$code."' order by id" );}// 创建⼀个空数据$sayList = [];// 循环遍历得到数据库内容while($row = mysqli_fetch_array($retval, MYSQLI_ASSOC)){$sayList[]= array('code'=>$row['code'],'name'=>$row['name']);//⼆维数组}// // 数组长度// echo count($sayList);// // 数组结构// print_r($sayList);// 循环遍历// for($i=0;$i<11;$i++){// for($j=0;$j<2;$j++){// echo $sayList[$i]['code']."-->".$sayList[$i]['name'];// }// }if($sayList){echo$callback.'('.json_encode($sayList).')';}else{echo$callback.'('.'[]'.')';}>select.html<!DOCTYPE html><html><head><meta charset="utf-8"><title></title><script src="jquery-1.11.2.js" type="text/javascript" charset="utf-8"></script><style type="text/css">#showInfo{position: absolute;width: 600px;height: 500px;overflow-y: scroll;overflow-x: hidden;background: lightgreen;left: 50%;margin-left: -300px;}#showInfo div{float:left;margin-left: 30px;margin-top: 30px;width: 160px;}#showInfo div select{width: 160px;}</style></head><body><div id="showInfo"><div><select id="province"></select></div><div><select id="city"></select></div><div><select id="area"></select></div></div><script type="text/javascript">$(function(){//获取列表数据的通⽤⽅法function getList(code,flag,callback){$.ajax({url:'data2.php',type:'get',dataType:"jsonp",data:{citycode:code,flag:flag},success:callback});}//获取地区信息的回调函数var area = function(data){$.each(data,function(i,element){var op = $("<option></option>").attr("value",data[i].code).append(data[i].name); $("#area").append(op);});}// 拼接市var city=function(data){for (var i = 0; i <data.length; i++) {var op = $("<option></option>").attr("value",data[i].code).append(data[i].name); $("#city").append(op);}// 判断是否是直辖市,即只有⼀个市if(data.length == 1){var citycode = $("#city").children("option").eq(0).attr("value");getList(citycode,3,area);}}// 拼接省var pr=function(data){for (var i = 0; i <data.length; i++) {var op = $("<option></option>").attr("value",data[i].code).append(data[i].name); $("#province").append(op);}//默认北京市getList('110000',2,city);getList('110100',3,area);}// 刚开始调⽤函数getList(1,1,pr)//给省份信息设置选择事件$("#province").change(function() {$("#city").children("option").remove();$("#area").children("option").remove();var pcode = $(this).val();getList(pcode,2,city);});//给省份信息设置选择事件$("#city").change(function() {$("#area").children("option").remove();var citycode = $(this).val();getList(citycode,3,area);});})</script></body></html>。
jquery+ajax实现省市区三级联动(封装和不封装两种方式)
jquery+ajax实现省市区三级联动(封装和不封装两种⽅式)⾸先,要实现如下图效果,1、要理清思路:先做出三个下拉菜单----根据第⼀个下拉菜单的value值获取第⼆个下拉列表的内容,第三个同理。
2、⽤到的数据库表:Chinastates表规律:根据国家级(中国)的areacode查询省级(如:北京) ; 根据省级的areacode查询市级(如:北京市辖);根据市级的areacode查询区级(如东城区)第⼀种⽅式:没有⽤到封装,数据读取较慢,可以看看原理,这样在第⼆种⽅式封装时就容易多了。
代码如下:<!DOCTYPE html><html><head><meta charset="UTF-8"><title></title><script src="../jquery-1.11.2.min.js"></script></head><body><select id="sheng"></select><select id="shi"></select><select id="qu"></select></body></html><script type="text/javascript">$(document).ready(function(e){//输出省var code = "0001";$.ajax({async:false,//取消异步url:"chuli.php",data:{code:code},type:"POST",dataType:"TEXT",success:function(data){var hang = data.trim().split("|"); //trim()去空格var str="";for(var i=0;i<hang.length;i++){var lie = hang[i].split("^");str = str+"<option value='"+lie[0]+"'>"+lie[1]+"</option>";}$("#sheng").html(str);}});//输出市$("#sheng").click(function(){var code2=$("#sheng").val();$.ajax({async:false,url:"chuli.php",data:{code:code2},type:"POST",dataType:"TEXT",success:function(data2){var hang2 = data2.trim().split("|");var str2 ="";for(var i=0;i<hang2.length;i++){var lie2=hang2[i].split("^");str2 = str2 +"<option value ='"+lie2[0]+"'>"+lie2[1]+"</option>";}$("#shi").html(str2);}});})//输出区县$("#shi").click(function(){var code3=$("#shi").val();$.ajax({async:false,url:"chuli.php",data:{code:code3},type:"POST",dataType:"TEXT",success:function(data3){var hang3 = data3.split("|");var str3 ="";for(var i=0;i<hang3.length;i++){var lie3=hang3[i].split("^");str3 = str3 +"<option value ='"+lie3[0]+"'>"+lie3[1]+"</option>";}$("#qu").html(str3);}});})})</script> 期间出现的问题:每个下拉列表的第⼀个数据输不出来:是因为每个下拉列表的第⼀个数据的value值都带有空格所以在输出data时要去空格data返回的值可能带有空格换⾏等,所以要⽤trim()⽅法去空格第⼆种⽅式:封装成插件,以后可以随时调⽤(重要)(1)主页⾯:<!DOCTYPE html><html><head><meta charset="UTF-8"><title></title><br>//引⼊jquery包<script src="../jquery-1.11.2.min.js"></script><br>//引⽤我们⾃⼰封装的js⽂件<script src="sanji.js"></script></head><body><br>//id要与封装的js插件中⼀致<div id="sanji"></div></body></html>(2)我们⾃⼰封装的js插件$(document).ready(function(e){//扔三个下拉列表到主页⾯建的div中$("#sanji").html("<select id='sheng'></select><select id='shi'></select><select id='qu'></select>"); //加载省的数据LoadSheng();//加载市的数据LoadShi();//加载区的数据LoadQu();//给省的下拉列表添加点击事件,当省变化时,对应的市和区会发⽣变化$("#sheng").click(function(){LoadShi();LoadQu();})//给市的下拉列表添加点击事件,当市变化时,对应的区发⽣变化$("#shi").click(function(){LoadQu();})});//加载省的下拉列表function LoadSheng() {var pcode = "0001";$.ajax({async: false,url: "chuli.php",data: { code: pcode },type: "POST",dataType: "TEXT",success: function(data) {var hang = data.trim().split("|");var str = "";for(var i = 0; i < hang.length; i++) {var lie = hang[i].split("^");str = str + "<option value='" + lie[0] + "'>" + lie[1] + "</option>";}$("#sheng").html(str);}});}//加载市省的下拉列表function LoadShi() {var pcode = $("#sheng").val();$.ajax({async: false,url: "chuli.php",data: { code: pcode },type: "POST",dataType: "TEXT",success: function(data) {var hang = data.trim().split("|");var str = "";for(var i = 0; i < hang.length; i++) {var lie = hang[i].split("^");str = str + "<option value = '" + lie[0] + "'>" + lie[1] + "</option>";}$("#shi").html(str);}});}//加载省的下拉列表function LoadQu() {var pcode = $("#shi").val();$.ajax({url: "chuli.php",data: { code: pcode },type: "POST",dataType: "TEXT",success: function(data) {var hang = data.trim().split("|");var str = "";for(var i = 0; i < hang.length; i++) {var lie = hang[i].split("^");str = str + "<option value = '" + lie[0] + "'>" + lie[1] + "</option>";}$("#qu").html(str);}});} 其次就是处理页⾯(两种⽅法都⽤到的):chuli.php<?php$code=$_POST["code"];require "DB.class.php";$db=new DB();$sql="select areacode,areaname from chinastates where parentareacode='{$code}'";$str=$db->strquery($sql);echo $str;最后就是封装的类⽂件:DB.class.phpfunction strquery($sql){$db = new MySQLi($this->host,$this->uid,$this->pwd,$this->dbname);$result = $db ->query($sql);$arr =$result->fetch_all();$str="";foreach($arr as $v){$str=$str.implode("^",$v)."|";}$str = substr($str,0,strlen($str)-1);return $str;}}>以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
基于AJAX技术及三层架构的Web应用_胡玲霞
)
貋貜貣 M O D E R N C OM P U T E R 2009.8
开发案例
)ÈÁ#7ÂÃ6H5Ç0ÄI"É'GÆÅB)A#ÁÃÂC4685Ç'È!0"GÉ9ÅB@%DÄ$(ÆÃÉÁÂ31#ÇÈ72'Ã8&ÇEFÉ"Å!9%5C3Â$(#)4ÈÃ'Á60ÇÉÅ1Æ2&DataOperator数据访问层、SqlHelper数据库接口层。
关键词: AJAX; 三层架构; 异步; XML
0 引言
随 着 互 联 网 的 发 展 ,Web 应 用 程 序 更 容 易 部 署 和维护, 很多企业级管理系统开始使用 B/S 模式,但 是 B/S 应用程序受制于 HTML 的限制, 无法像 C/S 那 样使用丰富的效果来展示数据, 任何与服务器的交互 都要求刷新页面, 这意味着这中间需要 2 到 5 秒的延 时,用户体验比较糟糕,而在基于 B/S 架构的 Web 应用 程序中引入 AJAX 技术可以很好地解决这些问题。 另 外,采用三层结构来部署 Web 应用系统,可以使得开 发流程更加规范和科学,很大程度上缩短开发时间。
数 据 操 作 成 功 的 同 时 ,将 数 据 写 入 Tree.xml,这 样 客 一
户端只需要将 Treeview 控件绑定到 Tree.xml,要数据 三 期
)
M O D E R N C OM P U T E R 2009.8 貤貜貋
开发案例
的时候不必从数据库中去检索, 只要直接从 XML 文
算 需要集中修改这一个文件就可以了,这就是所谓的数
使 用 的 Web 服 务 器 是 .NET3.5, 开 发 环 境 是 Visual
机 据访问层,在数据访问层中,不出现任何业务逻辑,数 (总 据访问层只管负责从数据库中存储或读取数据。 业务
使用AJAX技术实现网页级联下拉列表
引 言
A J A X全称 “ A s y n c h r o n o u s J a v a S c r i p t A n d X ML ”
A J A X的优点在于可以进行 页面的局部更新 、 通
过异步方式提升用户体验 、节省服务器带宽及 网络行效率 , 获取数据具有更强的 目
Ab s t r a c t :AJ AX c a n i mp r o v e t h e u s e r e x p e r i e n c e a n d i n t e r a c t w i t h We b a p p l i c a t i o n s e a s i l y . T h i s p a p e r d i s c u s s e s t h e AJ AX We b a p p l i c a t i o n mo d e l a n d i mp l e me n t a t i o n p r o c e s s ,r e a l i z e s t h e w e b p a g e c a s c a d i n g
交互 式 网页 [ 1 ] 。
法维护“ 历史” 状态 , 对移动设备的支持不够好[ 2 1 。 A J A X的核 心 是 J a v a S c i r p t对 象 XM L H t t p R e — q u e s t , 它是一种支持异步请求 的技术 , 该对象实现了
A J A X可 以在 服 务器 和 浏览 器 之 间 通过 J a v a S c r i p t 创 建 了一个 中间层 ( 这个 中间层 可被 称 为 A J A X 引擎 ) ,
中图分类号 : T P 3 9 3 文献标识码 : A
Re a l i z a t i o n o f W e b Pa g e Ca s c a d i n g
AJAX实现省市县三级联动效果
AJAX实现省市县三级联动效果最近在学AJAX做到这个省市县三级联动的案例,这⾥只是讲⼀下ajax请求的⼀些知识,对服务端数据.php⽂件就不叙述了。
(tips:其实省市县三级联动只需要引⼊jQuery省市县三级联动插件就可以实现)效果图⾸先准备两个服务端⽂件,另⼀个⽂件太长,这⾥就不导⼊了selsect.php<?php/*省市县后台数据接⼝接⼝调⽤规则:1.参数⼀:flag,⽤来区分请求的是省市县中间的那种数据2.参数⼆:选择省的时候传递pid,选择市的时候传递cIdhttp://localhost/select.php?flag=1#pId=23*/// include('./selectdata.php');require('./selectdata.php');// 省市县数据来⾃selectdata.php⽂件$province = $provinceJson;$city = $cityJson;$county = $countyJson;$flag = $_GET['flag'];// 省级数据if($flag == 1){echo json_encode($province);// 市级数据}else if($flag == 2){$pId = $_GET['pId'];$cityData = array();foreach ($city as $value) {if($value->id == $pId){// 直辖市array_push($cityData,$value);break;}else if($value->parent == $pId){// ⾮直辖市array_push($cityData,$value);}}echo json_encode($cityData);// 县级数据}else if($flag == 3){$cId = $_GET['cId'];$countyData = array();foreach ($county as $value) {if($value->parent == $cId){array_push($countyData,$value);}}echo json_encode($countyData);}>select.html这⾥可以⽤底层ajax 请求,也可以⽤快捷⽅法 $.get ⽅法进⾏数据请求。
strsts2+ajax三级联动
Jsp页面:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>单位类别</title><style type="text/css">body,td,th {font-size: 12px;}</style><script type="text/javascript">var xmlHttp;function createXmlHttpRequest(){if(window.XMLHttpRequset){xmlHttp = new XMLHttpRequest();}else if(window.ActiveXObject){xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");}}f unction Liandong(x,y){createXmlHttpRequest();var ld2=document.getElementById("dwlb2");if(y=="1" && ld2!=null){var len = ld2.options.length;for (var i=1; i < len; i++){ld2.options[i] = null;}ld2.options[0].disabled;}var url="changeSelect.action?liandong="+x+"&jishu="+y;xmlHttp.open("GET",url,true);xmlHttp.onreadystatechange=callback;xmlHttp.send(null);}f unction callback(){i f(xmlHttp.readyState == 4){if(xmlHttp.status == 200){var v = xmlHttp.responseText;var v=xmlHttp.responseText;var liandong=v.substring(0,1);v=v.substring(1,v.length);if(liandong=='0'){document.getElementById("liandong").innerHTML=v;}if(liandong=='1'){document.getElementById('d1').style.display="none";document.getElementById('liandong1').style.display="block";document.getElementById("liandong1").innerHTML=v;}if(liandong=='2'){document.getElementById('d2').style.display="none";document.getElementById("liandong2").innerHTML=v;document.getElementById('liandong2').style.display="block";}}}}function fanhui(){hasClosed = true;var ld0=document.getElementById("dwlb0");var ld1=document.getElementById("dwlb1");var ld2=document.getElementById("dwlb2");var ld0text="";var ld1text="";var ld2text="";if(ld0.value=='-1'){alert("请选择单位级别一级!");return false;}var obj = new Object();if(ld1==null && ld2==null){=ld0.options[ld0.selectedIndex].text;obj.value=ld0.value;}else if(ld1!=null && ld2==null){if(ld1.value!='-1'){=ld1.options[ld1.selectedIndex].text;obj.value=ld1.value;}else{=ld0.options[ld0.selectedIndex].text;obj.value=ld0.value;}}else if(ld1!=null && ld2!=null){if(ld1.value!='-1' && ld2.value=='-1'){=ld1.options[ld1.selectedIndex].text;obj.value=ld1.value;}else if(ld1.value!='-1' && ld2.value!='-1'){=ld2.options[ld2.selectedIndex].text;obj.value=ld2.value;}else if(ld1.value=='-1' && ld2.value=='-1'){=ld0.options[ld0.selectedIndex].text;obj.value=ld0.value;}}}</script></head><body bgcolor="#E6EFF8" onload="Liandong('000000','0')"> <br><table width="99%" border="0" align="center" cellpadding="2" cellspacing="1" bgcolor="#aaccf0"><tr align="center" bgcolor="#ffffff"><td width="30%"><s:property value=""/>单位类别一级:</td><td align="left"><div id="liandong"></div></td></tr><tr align="center" bgcolor="#ffffff"><td width="30%">单位类别二级:</td><td align="left"><div id="liandong1" style="display: none"></div><select name="d1" style="width: 150px;" id="d1"><option value="-1">--请选择--</option></select></td></tr><tr align="center" bgcolor="#ffffff"><td width="30%">单位类别三级:</td><td align="left"><div id="liandong2" style="display: none"></div><select name="d2" style="width: 150px;" id="d2"><option value="-1">--请选择--</option></select></td></tr></table></body></html>Struts2 action类:public class ChangeSelectAction extends ActionSupport {private String liandong;private String jishu;private static final String CONTENT_TYPE= "text/html; charset=GBK";private List list;@SuppressWarnings("unchecked")@Overridepublic String execute() throws Exception {HttpServletResponse response =ServletActionContext.getResponse();HttpServletRequest request=ServletActionContext.getRequest();request.setCharacterEncoding("UTF-8");response.setContentType(CONTENT_TYPE);PrintWriter out=response.getWriter();SelectDicMap sdm=newSelectDicMap(XMLDictionaryTools.getXmlDictMap(),"hyfl");//从数据字典中取值。
基于jquery实现省市区三级联动效果
基于jquery实现省市区三级联动效果本⽂实现更新了项⽬的省市区三级联动数据,更新后最新的海南三沙都有,分享给所有需要的⼩伙伴们。
JQUERY + JSON,⽆数据库,纯JS代码,⽆加密,⽆压缩,可直接使⽤在任何项⽬中。
说明:数据来源于国家统计局官⽹。
先上图:绑定省市区使⽤⽅法:1. 引⽤JQUERY<script type="text/javascript" src="/libs/jquery/1.11.1/jquery.min.js"></script>2. 引⽤省市区数据<script type="text/javascript" src="pdata.js"></script>3. HTML代码:<div class="row"><div class="col-sm-12"><div class="form-group"><label class="control-label col-sm-2">所在区域</label><div class="col-sm-3"><select name="input_province" id="input_province" class="form-control"></select></div><div class="col-sm-3"><select name="input_city" id="input_city" class="form-control"></select></div><div class="col-sm-3"><select name="input_area" id="input_area" class="form-control"></select></div></div></div></div>4. JS代码:$(function () {var html = "<option value=''>== 请选择 ==</option>"; $("#input_city").append(html); $("#input_area").append(html);$.each(pdata,function(idx,item){if (parseInt(item.level) == 0) {html += "<option value='" + s + "' exid='" + item.code + "'>" + s + "</option>";}});$("#input_province").append(html);$("#input_province").change(function(){if ($(this).val() == "") return;$("#input_city option").remove(); $("#input_area option").remove();var code = $(this).find("option:selected").attr("exid"); code = code.substring(0,2);var html = "<option value=''>== 请选择 ==</option>"; $("#input_area").append(html);$.each(pdata,function(idx,item){if (parseInt(item.level) == 1 && code == item.code.substring(0,2)) {html += "<option value='" + s + "' exid='" + item.code + "'>" + s + "</option>";}});$("#input_city").append(html);});$("#input_city").change(function(){if ($(this).val() == "") return;$("#input_area option").remove();var code = $(this).find("option:selected").attr("exid"); code = code.substring(0,4);var html = "<option value=''>== 请选择 ==</option>";$.each(pdata,function(idx,item){if (parseInt(item.level) == 2 && code == item.code.substring(0,4)) {html += "<option value='" + s + "' exid='" + item.code + "'>" + s + "</option>"; }});$("#input_area").append(html);});//绑定$("#input_province").val("⼴东省");$("#input_province").change();$("#input_city").val("深圳市");$("#input_city").change();$("#input_area").val("罗湖区");});源码下载:以上就是本⽂的全部内容,希望对⼤家的学习有所帮助。
省市县三级联动
Ajax+JS+Xml无刷新省市县三级联动(使用母版页,修改个人信息)前言:这是我第一次做省市县三级联动,所以体会很深就把我所遇到的情况给总结了一下,仅供大家参考!(其中,有许多资料是我从网上下载的。
)要想无刷新我们的配置ajax所以在web.config中添加ajax的配置:<system.web><httpHandlers><add verb="POST,GET"path="ajax/*.ashx"type="Ajax.PageHandlerFactory, Ajax" /> </httpHandlers></system.web>首先:我们在页面放三个DropDownList控件<asp:DropDownList ID="DropDownList1"runat="server"Height="20px"Width="60px"Font-Size="12px"></asp:DropDownList><asp:DropDownList ID="DropDownList2"runat="server"Height="20px"Width="60px"Font-Size="12px"></asp:DropDownList><asp:DropDownList ID="DropDownList3"runat="server"Height="20px"Width="60px"Font-Size="12px"></asp:DropDownList>然后再添加三个Lable控件,这是为了接收dropdownlist控件中的值<input id="lbl_provice_id"type="text"runat="server"style="display :none ;" name="lbl_provice_id"/><input id="lbl_provice"type="text"runat="server"style="DISPLAY: none"value=""/><input id="lbl_city"type="text"runat="server"style="DISPLAY: none"value=""/><input id="lbl_area"type="text"runat="server"style="DISPLAY: none"/>然后再在页面的源码中的page中添加enableEventValidation="false"这样就可以解决回调会回调函数无效这个错误。
jQueryajax实现省市县三级联动
jQueryajax实现省市县三级联动本⽂我们⽤Jquery,ajax,做⼀个省,市,县的三级联动:下⾯是我做三级联动下拉的步骤以及逻辑第⼀步:先做⼀个省市区表格第⼆步:建个PHP页⾯显⽰⽤我是在<body>⾥放<div>⽤来接收要显⽰的省市区表格信息,⾥⾯嵌⼊jquery-1.11.2.min.js和⾃⼰封装的三联动省市区的⽅法第三步:写封装⽅法⽤JS第四步:做个纯php处理页⾯,这个页⾯处理传过来的任何代号⾸先我们要建⽴数据库:这就是包含省,市,县的数据库。
下⾯我们就写主页⾯:sanji.php:<!doctype html><html lang="en"><head><meta charset="UTF-8" /><title>Document</title><script src="jquery-1.11.2.min.js"></script><script src="sanjiliandong.js"></script></head><body><div id="sanjiliandong"><!--在这⾥使⽤三级联动插件--></div></body></html>然后就是js⽂件:// JavaScript Document$(document).ready(function(e){//向div⾥⾯仍三个下拉var str = "<select id='sheng'></select><select id='shi'></select><select id='qu'></select>";$("#sanjiliandong").html(str);//三个下拉显⽰//当省选中的话市也会跟着变去也会变。
Ajax商品分类三级联动的简单实现(案例)
Ajax商品分类三级联动的简单实现(案例)思路分析:效果:当页⾯加载时,利⽤ajax异步向后台请求数据,加载⼀级商品类别,当选择⼀级商品时加载⼆级商品,选择⼆级商品加载三级商品。
实现:1、当拿到数据后加载pid为0的商品,并动态创建option将商品追加到⼀级菜单中,并设置value值2、当选择⼀级商品时加载pid=当前id的商品,并创建option将商品追加到⼆级菜单中,并设置value值3、当选择⼆级商品时加载pid=当前id的商品,并创建option将商品追加到三级菜单中,并设置value值页⾯效果:$(function(){//请求路径var url="03goods.php";//option默认内容var option="<option value='0'>未选择</option>";//获取jq对象var $sel1=$(".sel1");var $sel2=$(".sel2");var $sel3=$(".sel3");//⾃动⽣成⼀个<option>元素function createOption(value,text){var $option=$("<option></option>");$option.attr("value",value);$option.text(text);return $option;}//加载数据function ajaxSelect($select,id){//get请求$.get(url,{"pid":id},function(data){$select.html(option);for(var k in data ){$select.append(createOption(data[k].id,data[k].name));}},"json");}//⾃动加载第⼀个下拉菜单ajaxSelect($sel1,"0");//选择第⼀个下拉菜单时加载第⼆个$sel1.change(function(){var id=$sel1.val();if(id=="0"){$sel2.html(option);$sel3.html(option);}else{ajaxSelect($sel2,id);}});//选择第⼆个下拉菜单时加载第三个$sel2.change(function(){var $id=$sel2.val();if($id=="0"){$sel3.html(option);}else{ajaxSelect($sel3,$id);}});});后台代码:<?phpheader('Content-Type:text/html; charset=utf-8');//数据$arr=array(//array(分类id,分类名,分类的⽗id)array('id'=>'1','name'=>'数码产品','pid'=>'0'),array('id'=>'2','name'=>'家电','pid'=>'0'),array('id'=>'3','name'=>'书籍','pid'=>'0'),array('id'=>'4','name'=>'服装','pid'=>'0'),array('id'=>'5','name'=>'⼿机','pid'=>'1'),array('id'=>'6','name'=>'笔记本','pid'=>'1'),array('id'=>'7','name'=>'平板电脑','pid'=>'1'),array('id'=>'8','name'=>'智能⼿机','pid'=>'5'),array('id'=>'9','name'=>'功能机','pid'=>'5'),array('id'=>'10','name'=>'电视机','pid'=>'2'),array('id'=>'11','name'=>'电冰箱','pid'=>'2'),array('id'=>'12','name'=>'智能电视','pid'=>'10'),array('id'=>'13','name'=>'编程书籍','pid'=>'3'),array('id'=>'14','name'=>'JavaScript','pid'=>'13'),);//获取指定分类的商品function getByPid($arr,$pid){$result=array();foreach($arr as $v){if($v['pid']==$pid){$result[]=$v;}}return $result;}//获取请求参数$pid=isset($_GET['pid'])?$_GET['pid']:'0';$result=getByPid($arr,$pid);//输出json数据echo json_encode($result);>以上这篇Ajax商品分类三级联动的简单实现(案例)就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
Ajax实现省市区三级联动实例代码
Ajax实现省市区三级联动实例代码html代码:<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>省市区三级联动</title><link rel="stylesheet" href="./assets/bootstrap/dist/css/bootstrap.min.css" rel="external nofollow" /><style type='text/css'>.container{padding-top: 150px;}</style></head><body><div class='container'><div class="form-inline"><div class="form-group"><select type="text" class="form-control" id="province"><!-- <option>请选择省份</option> --></select></div><div class="form-group"><select type="text" class="form-control" id="city"><option>请选择城市</option></select></div><div class="form-group"><select type="text" class="form-control" id="area"><option>请选择县区</option></select></div></div></div><script src="./js/ajax.js"> </script><script src="./js/template-web.js"></script><!-- 省份模板 --><script type="text/html" id="provinceTpl"><option>请选择省份</option>{{each province}}<!-- $value:循环过程中的当前项 --><option value="{{$value.id}}">{{$}}</option>{{/each}}</script><!-- 市模板 --><script type="text/html" id="cityTpl"><option>请选择城市</option>{{each city}}<!-- $value:循环过程中的当前项 --><option value="{{$value.id}}">{{$}}</option>{{/each}}</script><!-- 县区模板 --><script type="text/html" id="areaTpl"><option>请选择县区</option>{{each area}}<!-- $value:循环过程中的当前项 --><option value="{{$value.id}}">{{$}}</option>{{/each}}</script><script>//获取省市区下拉元素var province=document.getElementById('province');var city=document.getElementById('city');var area=document.getElementById('area');//1.获取省份信息ajax({type:'get',url:'http://localhost:3000/province',success:function(data){// console.log(data);//将服务器端返回的数据和html进⾏拼接// 第⼀个参数为模板id,第⼆个参数为服务器返回的数据var html = template('provinceTpl',{province:data});//province为上⾯的each对象,必须⼀致 // console.log(html);//将拼接好的字符串html显⽰到页⾯中province.innerHTML=html;}});//为省份的下拉框添加值改变事件province.onchange=function(){//获取省份的idvar pid=this.value;//清空县区下拉框中的数据var html=template('areaTpl',{area:[]});area.innerHTML=html;//根据省份id获取城市信息ajax({type:'get',url:'http://localhost:3000/cities',data:{id:pid},success:function(data){// console.log(data);var html = template('cityTpl',{city:data});city.innerHTML=html;}});}//为市的下拉框添加值改变时事件city.onchange=function(){//获取城市idvar cid=this.value;//根据城市id获取县区idajax({type:'get',url:'http://localhost:3000/areas',data:{id:cid},success:function(data){var html=template('areaTpl',{area:data});area.innerHTML=html;}});}</script></body></html>Ajax封装⽅法:function ajax(options){//定义默认var defaults ={type:'get',url:'',data:{},Headers:{'Content-Type': 'application/x-www-form-urlencoded'},success:function(){},error:function(){}};//⽤options中的对象覆盖defaults中对象Object.assign(defaults,options);//创建var xhr= new XMLHttpRequest();//拼接请求参数变量var params='';//循环⽤户传递进来的对象格式参数for(var attr in defaults.data){//将参数转换成字符串格式params+= attr +'='+ defaults.data[attr] +'&';}//字符串截取,将最后的&截取掉params= params.substr(0,params.length -1);//判断请求⽅式if(defaults.type=='get'){defaults.url=defaults.url +'?'+ params;}//配置xhr.open(defaults.type,defaults.url);//发送请求if(defaults.type=='post'){//⽤户期望的向服务端传递的请求参数类型var contentType=defaults.Headers['Content-Type'];//post请求时必须设置的xhr.setRequestHeader('Content-Type',contentType);//判断请求参数类型if(contentType=='application/json'){xhr.send(JSON.stringify(defaults.data));}else{xhr.send(JSON.stringify(params));}}else{xhr.send();}//监听onload事件,当接收完响应数据后触发xhr.onload=function(){//xhr.getResponseHeader()//获取响应头部数据var contentType=xhr.getResponseHeader('Content-Type');//服务端返回的数据var responseText=xhr.responseText;if(contentType.includes('application/json')){//把JSON字符串转换为JSON 对象responseText = JSON.parse(responseText);}//对http状态码判断,判断是否等于200if(xhr.status==200){//调⽤处理成功情况的函数defaults.success(responseText,xhr);}else{//调⽤处理失败的情况函数defaults.error(responseText,xhr);}}}服务器端测试代码:/**** server.js ****/// ⼀个简单的后端路由//1.引⼊express框架const express=require('express');const fs=require('fs');//2.引⼊路径处理模块const path=require('path');const bodyParser=require('body-parser');//post//3.创建web服务器const app=express();//post//extended:返回的对象是⼀个键值对,当extended为false的时候,键值对中的值就为'String'或'Array'形式,为true的时候,则可为任何数据类型。
三级联动步骤
三级联动地址一.添加文件①将hat_province(省),hat_city(市), hat_area(区县)导入数据库。
②在js文件中引入cms.js。
③CMSService直接粘贴到.cxsw.service中即可,不用修改。
④GetAreaServlet.GetCityServlet,GetProvinceServlet粘贴到.cxsw.servlet中(cms.js会使用到servlet)。
二.添加地址一栏(add.jsp)①回显省市县<script src="<%=request.getContextPath()%>/js/cms.js"></script>②页面一加载就显示省市县<body onload="getProvince()">③添加下拉菜单--地址<label>地址</label><label>省</label><selectid="province"name="province" onchange="getCity(this.value)"><option value="-1">请选择省份</option></select><label>市</label><select id="city"name="city" onchange="getCountry(this.value)"><option value="-1">请选择市</option></select><label>县: </label><select id="country" name="country"><option value="-1">请选择县</option></select>三.取地址(addServlet)①addServlet:DoGet():String province_id = request.getParameter("province");String city_id = request.getParameter("city");String country_id = request.getParameter("country");CMSService cmsService = new CMSService();String provinceName=cmsService.getProvinceName(province_id);String cityName=cmsService.getCityName(city_id);String countryName=cmsService.getCountryName(country_id);String address = provinceName+"-"+cityName+"-"+countryName;System.out.println("测试address:" + address);//测试成功知后删除该语句地址没有什么特殊之处,同“姓名”一样将address存储到Model,处理业务,响应即可。
JQuery教程实例-Ajax三级省市联动菜单
JQuery教程实例-Ajax三级省市联动菜单1,目录结构这个实例的文件目录结构如下图所示。
其中,ajax.sql是数据库文件,data.php是处理ajax请求的php文件,droplist.js是页面效果处理文件,index.php是显示页面。
在进行下一步之前,我们先将ajax.sql导入到mysql数据库中。
2,index.php 文件主要是在页面刚打开时,显示默认的省的信息。
这里不再赘述,代码如下:1<html>2<head>3<meta http-equiv="Content-Type"content="text/html;charset=utf-8"/>4<script type="text/javascript"src="jquery-1.3.2.min.js"></script>5<script type="text/javascript"src="droplist.js"></script>6</head>7<body>8<div align="center"style="margin-top:200px;">9<?php10$conn=mysql_connect("localhost","root","");11mysql_select_db("novel");12mysql_query("set names'utf8'");13$sql="select*from province";14$result=mysql_query($sql);15echo"<from id='droplist'>\n";16echo"<select name='province'>\n";17echo"<option value='-1'selected>请选择省份</option>\n";18while($row=mysql_fetch_row($result)){19echo"<option value='$row[1]'>$row[2]</option>\n";20}21echo"</select>\n";22echo"<select name='selectCity'></select>\n";23echo"<select name='area'></select>\n";24echo"</form>\n";25?>26</div>27</body>28</html>3,droplist.js文件主要是实现了ajax的请求和相应的页面显示效果的处理,比如:其中自定义了ajaxSelectArea()和ajaxSelectCity()两个函数发送ajax请求,这两个函数里面用到的$.ajax()是jquery 框架中ajax的底层实现。
ajax实现省市三级联动效果
ajax实现省市三级联动效果本⽂实例为⼤家分享了ajax实现三级联动效果的具体代码,供⼤家参考,具体内容如下1、html代码<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Title</title><style type="text/css">.wrap{background-color: beige;width: 400px;height: 200px;margin: 0 auto;text-align: center;margin-top: 200px;}.wrap select{width:130px;height: 30px;}</style><script type="text/javascript" src="jquery-1.8.3.min.js"></script></head><body><div class="wrap"><select id="province"></select><select id="city"></select></div><script type="text/javascript">function getctiydata() {$("#city").empty();var pid = $("#province").val();$.ajax({url:"/getCitys?pid="+pid,dataType:"json"}).done(function (data) {for (var i in data){$("#city").append($("<option value='"+ data[i].id +"'>"+ data[i].name +"</option>"))}})}$.ajax({url: "/getAllProvince",dataType:"json"}).done(function (data) {for (var i in data){$("#province").append($("<option value = '"+data[i].id+"'>"+ data[i].name +"</option>"))}getctiydata()});$("#province").change(function () {getctiydata()})</script></body></html>2、javaservletpackage servlet;import DButil.DataSourceUtil;import com.alibaba.fastjson.JSON;import domain.Province;import mons.dbutils.QueryRunner;import mons.dbutils.handlers.BeanListHandler;import javax.jws.WebService;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.sql.SQLException;import java.util.List;@WebServlet("/getAllProvince")public class ProvinceServlet extends HttpServlet{@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setContentType("application/json;charset=utf8");QueryRunner queryRunner = new QueryRunner(DataSourceUtil.getDataSource());String sql = "select * from province";try{List<Province> provinces = queryRunner.query(sql, new BeanListHandler<Province>(Province.class));Object json = JSON.toJSON(provinces);resp.getWriter().print(json);} catch (SQLException e){e.printStackTrace();}}}package servlet;import DButil.DataSourceUtil;import com.alibaba.fastjson.JSON;import domain.City;import mons.dbutils.QueryRunner;import mons.dbutils.handlers.BeanListHandler;import javax.jws.WebService;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.sql.SQLException;import java.util.List;@WebServlet("/getCitys")public class CityServlet extends HttpServlet{@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setContentType("application/json;charset=utf8");QueryRunner queryRunner = new QueryRunner(DataSourceUtil.getDataSource());String pid = req.getParameter("pid");String sql = "select * from City where pid=?";try{List<City> cities = queryRunner.query(sql, new BeanListHandler<City>(City.class), pid);Object toJSON = JSON.toJSON(cities);resp.getWriter().print(toJSON);} catch (SQLException e){e.printStackTrace();}}}3、数据库池化<?xml version="1.0" encoding="UTF-8"?><c3p0-config><default-config><property name="driverClass">com.mysql.jdbc.Driver</property><property name="jdbcUrl">jdbc:mysql://localhost:3306/text</property><property name="user">root</property><property name="password">root</property><property name="acquireRetryAttempts">0</property></default-config></c3p0-config>以上就是省市联动的核⼼代码。
T24:基于Ajax的三级机构联动的用户控件封装
◦ 检查request是否仍然为false(如果一切顺利就不会是false)
◦ 如果出现问题则使用JavaScript警告通知用户出现了问题
准备好XMLHttpRequest对象,就可以建立到服务器
的请求了。
◦ 首先结合一些表单中的数据来构造URL: ◦ 注:escape() 方法用于转义不能用明文正确发送的任何字符 。比如,空格将被转换成字符 %20,从而能够在 URL 中传 递这些字符。 ◦ 然后建立请求:
解码难度
◦ XML的解析得考虑子节点父节点关系,让人头昏眼花,而JSON的解析难度几
乎为零。
流行度
◦ XML已经被业界广泛的使用,而JSON才刚刚开始,但在Ajax领域,JSON凭 借自身的优势有可能最终取代XML
JSON是JavaScript原生格式,这意味着在JavaScript中
处理JSON数据不需要任何特殊的 API 或工具包。
北风网项目培训
TheOneHR人力资源管理系统
第24讲:基于Ajax的三级机构联动的用户控件封装
讲师:风舞烟
Dom基础 Json语法 Ajax简介 综合案例-Ajax+javascript三级联动DropDownList
DOM基础
Node接口也定义了一些所有节点类型都包含的属性和方法.
字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转 义。 值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false 、 null、对象(object)或者数组(array)。这些结构可以嵌套
数值(number)与C或者Java的数值非常相似。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Web.Config中:
-----------------------------------------------------------------------------------------------
<httpHandlers>
<add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro.2"/>
</httpHandlers>
-----------------------------------------------------------------------------------------------
javascript脚本:
----------------------------------------------------------------------------------------------- <script language="javascript" type="text/javascript">
<!--
// ACLOUD 常用JS函数
function getBid(s){
return document.getElementById(s);
}
function getBmc(s){
return document.getElementByName(s);
}
//显示分类列表// key,stid,tb,bskeyid,bsid
function showNext(obj,key,id,tb,bskeyid,bsidv)
{
if(bsidv==null || bsidv=="" || bsidv.length<1)return;
var slt =getBid(obj);
var v = AddPro.getNextClass(key,id,tb,bskeyid,bsidv).value; // 类的名称
//alert(v);
//return;
if (v != null){
if(v != null && typeof(v) == "object" && v.Tables != null)
{
slt.length = 0;
slt.options.length = 0;
slt.options.add(new Option("请选择",0));
//加了个“请选择”主要为了触发onchange事件
if(obj=="ddl2"){
getBid("ddl3").options.length=0;
getBid("ddl3").options.add(new Option("请选择",0));
}
for(var i=0; i<v.Tables[0].Rows.length; i++)
{
var txt = v.Tables[0].Rows[i].txt; //这个地方需要注意区分大小写
var vol = v.Tables[0].Rows[i].vol; //跟dataset表的列名称要一
致
slt.options.add(new Option(txt,vol));
}
}
}
return;
}
//JS方法取值
function getData(){
var str = getBid("ddl1").value +":"+ getBid("ddl2").value +":"+ getBid("ddl3").value;
str = "您选择的是:" +str;
getBid("<%=Label1.ClientID%>").innerText = str;
alert(str);
return false;
}
-->
</script>
----------------------------------------------------后台----------------------------------------------------------- Page_Load中:
//必要的
AjaxPro.Utility.RegisterTypeForAjax(typeof(AddPro));
----------------------------------------------------后台--------------------------------------------------------- [AjaxPro.AjaxMethod]
public DataSet getNextClass(string key, string stid, string tb, string bskeyid, string bsid) {
//因为不希望页面可以知道字段名称所以as txt,id as vol 如果是sql ser 可以用=
//页面获取的列名称必须跟这个一同样而且区分大小写一般都是这个地方容易疏忽了
//所以二级分类没变化
try
{
return BLL_Production.ToGetst(key,stid,tb,bskeyid,bsid);
}
catch
{
//throw;
return null;
}
}
private void BindDc()
{
//第一个
ddl1.DataSource = BLL_ProBigClass.GetBigClassModel();
ddl1.DataTextField = "Pro_BigClass1";
ddl1.DataValueField = "ID1";
ddl1.DataBind(); // key,stid,tb,bskeyid,bsid
if (ddl1.DataSource != null) ddl1.Attributes.Add("onchange", "showNext('ddl2','Pro_SmallClass','ID','Tb_Pro_SmallClass','Pro_BigClassID',this.options[selecte dIndex].value);");
//可以先判断DropDownList.SelectedItem.Value
//第二个
ddl2.DataSource = BLL_ProSmallClass.GetSmallClassByID(Convert.ToInt32(ddl1.SelectedItem.Value));
ddl2.DataTextField = "Pro_SmallClass1";
ddl2.DataValueField = "ID1";
ddl2.DataBind();
if (ddl2.DataSource != null) ddl2.Attributes.Add("onchange", "showNext('ddl3','Pro_ThreeClass','ID','Tb_Pro_ThreeClass','Pro_SmallID',this.options[selectedIn dex].value);");
//第三个
ddl3.DataSource = BLL_ProThreeClass.GetThreeClassByID(Convert.ToInt32(ddl2.SelectedItem.Value));
ddl3.DataTextField = "Pro_ThreeClass1";
ddl3.DataValueField = "ID1";
ddl3.DataBind();
}
--------------------------------------------------------------------------------------------------------------------。