php+js+ajax+mysql实现省市三级联动

2024-06-21 11:08

本文主要是介绍php+js+ajax+mysql实现省市三级联动,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

php+js+ajax+mysql实现省市三级联动

效果如下图:


思路:先获取所选省的市或者是所选时的县,将获取的数据转换为jason格式的字符串返回到ajax客户端,在客户端使用eval将jason格式的字符串转化为对象,将对象的每个元素值创建成文本节点,并创建option节点,将文本节点追加到option节点,在将option的节点追加给select节点。


ajax-area-select.html


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>实现使用ajax+dom+php+mysl 实现三级联动(省市县)</title>
<script src="Scripts/ajaxUtil.js" language="javascript" type="text/javascript"></script>
<script language="javascript" type="text/javascript">
//定义全局变量objectId用来保存select的onchange事件调用的函数传过来的值(sheng,shi,xian),一边以后调用select对象用var objectId="";//定义函数,获取数据库的省份数据function getArea(id,objid){objectId=objid;//每次往select节点写入option前先将原有的option节点清掉(关于这个节点删除,还有更简单的方法在我其他文章有)var sel2=document.getElementById(objid);var childS=sel2.childNodes;for(var i=childS.length-1;i>=0;i--){//alert(childS.length);sel2.removeChild(childS[i]);}//定义urlvar url="ajax-youku-server.php";//定义参数var params="id="+id;//调用ajax 进行交互get(url,params,processData);  }//处理服务器端返回的数据并且显示
function processData(xhr){//将服务器端返回的jason格式的字符串转化为对象var obj=eval("("+xhr.responseText+")");//获取对应objectId(sheng,shi,xian)变量的下拉菜单的对象
var sel1=document.getElementById(objectId);
//创建option节点
var op1=document.createElement("option");//给option加上value属性并赋值为0op1.setAttribute("value",0);    //创建文本节点textvar text=document.createTextNode("----请选择----");//将文本节点追加给op1op1.appendChild(text);//将op1追加给sel1sel1.appendChild(op1);
//在此将jason数组对象的下表为id的作为option的value值,将下表为name的值作为文本节点追加给
for(var i=0;i<obj.length;i++){var op1=document.createElement("option");//alert(obj[i].id);op1.setAttribute("value",obj[i].id);    //创建文本节点textvar text=document.createTextNode(obj[i].name);op1.appendChild(text);sel1.appendChild(op1);   //alert(obj[i-1].id+"-"+obj[i-1].name);}}
</script>
</head>
<body οnlοad="getArea('','sheng')">
<div style="border:#006 dashed 1px;">
<select id="sheng" οnchange="getArea(this.value,'shi')"></select>省
<select id="shi"  οnchange="getArea(this.value,'xian')"></select>市
<select id="xian"></select>县
</div>
</body>
</html>


ajaxUtil.js


function get(url1,params,methodName){/*!!!!!!!!!!!!!!这个函数是关键,这个函数包括初始化对象,请求的路径等ajax使用的基本步骤:1、初始化ajax引擎2、封装url(设定要请求的路径)3、打开ajax引擎(同步方式、异步的方式;本次传输使用get还是post)4、将要请求的信息通过引擎发送到服务器进行处理5、监听服务器返回给ajax引擎的处理状态6、判断是否交互完毕,如果交互完毕则取出返回的数*/    //初始化ajax引擎var xhr = new XMLHttpRequest();//这种方式只针对ie浏览器,并且ie6以下还有问题。//重组URL的值,将请求路径和获取的参数一并传过去//在这Math.random()的防止缓存重复var url=url1+"?"+params+"&r="+Math.random();//alert(url);//打开引擎xhr.open("get",url,true);   //readyState=1//发送请求xhr.send(null);   //readyState=2//监听readyState值的改变,每次改变都会执行下面额函数  xhr.onreadystatechange=function (){//如果等于4,表明交互完毕 ,我们可以取出服务器返回的内容if(xhr.readyState==4){//动态调用方法,为什么说是动态呢?方法的名称是个变量methodNamemethodName(xhr);           }}
}//$$()方法用于方便取出 id="id" 的对象
function $$(id){  return document.getElementById(id);
}

ajax-youku-server.php


<?php
header("Content-Type:text/html;charset=utf-8");
include_once("./conn.php");
//接受客户端传来的数据
$id=$_GET['id'];
//下划线就像我们平时用的*和?,sql的like语句中,使用%和_来代表任意多个字符和一个字符
$sql="select id,name from area where id like '".$id."__'";
//echo $sql;
//查询
$rs=mysql_query($sql);//将查询到的数据封装成jason格式的字符串(在此也可以用php将数组转换为jason格式字符串的函数那样会更简单写)
$opstr="[";
while($rows=mysql_fetch_array($rs)){$opstr.="{id:'".$rows['id']."',name:'".$rows['name']."'},";}$len=strlen($opstr)-1;$opstr=substr($opstr,0,$len);$opstr.="]";echo $opstr;
?>

conn.php


<?php
//建立数据库连接
mysql_connect("localhost","root","");
//选择数据库
mysql_select_db("area");
//设置连接数据库的编码方式
mysql_query("set names utf8");
?>

点击打开链接下载联动的sql文件



这篇关于php+js+ajax+mysql实现省市三级联动的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1081058

相关文章

C++对象布局及多态实现探索之内存布局(整理的很多链接)

本文通过观察对象的内存布局,跟踪函数调用的汇编代码。分析了C++对象内存的布局情况,虚函数的执行方式,以及虚继承,等等 文章链接:http://dev.yesky.com/254/2191254.shtml      论C/C++函数间动态内存的传递 (2005-07-30)   当你涉及到C/C++的核心编程的时候,你会无止境地与内存管理打交道。 文章链接:http://dev.yesky

mysql索引四(组合索引)

单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引;组合索引,即一个索引包含多个列。 因为有事,下面内容全部转自:https://www.cnblogs.com/farmer-cabbage/p/5793589.html 为了形象地对比单列索引和组合索引,为表添加多个字段:    CREATE TABLE mytable( ID INT NOT NULL, use

mysql索引三(全文索引)

前面分别介绍了mysql索引一(普通索引)、mysql索引二(唯一索引)。 本文学习mysql全文索引。 全文索引(也称全文检索)是目前搜索引擎使用的一种关键技术。它能够利用【分词技术】等多种算法智能分析出文本文字中关键词的频率和重要性,然后按照一定的算法规则智能地筛选出我们想要的搜索结果。 在MySql中,创建全文索引相对比较简单。例如:我们有一个文章表(article),其中有主键ID(

mysql索引二(唯一索引)

前文中介绍了MySQL中普通索引用法,和没有索引的区别。mysql索引一(普通索引) 下面学习一下唯一索引。 创建唯一索引的目的不是为了提高访问速度,而只是为了避免数据出现重复。唯一索引可以有多个但索引列的值必须唯一,索引列的值允许有空值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该使用关键字UNIQUE,把它定义为一个唯一索引。 添加数据库唯一索引的几种

mysql索引一(普通索引)

mysql的索引分为两大类,聚簇索引、非聚簇索引。聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引则不同。聚簇索引能够提高多行检索的速度、非聚簇索引则对单行检索的速度很快。         在这两大类的索引类型下,还可以降索引分为4个小类型:         1,普通索引:最基本的索引,没有任何限制,是我们经常使用到的索引。         2,唯一索引:与普通索引

通过SSH隧道实现通过远程服务器上外网

搭建隧道 autossh -M 0 -f -D 1080 -C -N user1@remotehost##验证隧道是否生效,查看1080端口是否启动netstat -tuln | grep 1080## 测试ssh 隧道是否生效curl -x socks5h://127.0.0.1:1080 -I http://www.github.com 将autossh 设置为服务,隧道开机启动

【服务器运维】MySQL数据存储至数据盘

查看磁盘及分区 [root@MySQL tmp]# fdisk -lDisk /dev/sda: 21.5 GB, 21474836480 bytes255 heads, 63 sectors/track, 2610 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical)

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测 目录 时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测基本介绍程序设计参考资料 基本介绍 MATLAB实现LSTM时间序列未来多步预测-递归预测。LSTM是一种含有LSTM区块(blocks)或其他的一种类神经网络,文献或其他资料中LSTM区块可能被描述成智能网络单元,因为

vue项目集成CanvasEditor实现Word在线编辑器

CanvasEditor实现Word在线编辑器 官网文档:https://hufe.club/canvas-editor-docs/guide/schema.html 源码地址:https://github.com/Hufe921/canvas-editor 前提声明: 由于CanvasEditor目前不支持vue、react 等框架开箱即用版,所以需要我们去Git下载源码,拿到其中两个主

android一键分享功能部分实现

为什么叫做部分实现呢,其实是我只实现一部分的分享。如新浪微博,那还有没去实现的是微信分享。还有一部分奇怪的问题:我QQ分享跟QQ空间的分享功能,我都没配置key那些都是原本集成就有的key也可以实现分享,谁清楚的麻烦详解下。 实现分享功能我们可以去www.mob.com这个网站集成。免费的,而且还有短信验证功能。等这分享研究完后就研究下短信验证功能。 开始实现步骤(新浪分享,以下是本人自己实现