jQuery+php+mysql,轻松实现ajax无刷新省市二级联动

用jQuery的ajax方法,结合PHP,轻松实现省市级的二级联动:

新建area.php

<?
 $dbc=mysqli_connect("localhost","xxxx","xxxxxxxxxx","test") or die("can not connect to mysql ".mysqli_error());
 mysqli_query($dbc,"set names utf8");
 header("Content-Type:text/html;charset=utf-8");
 
 if($_REQUEST['do']=="search" && $_REQUEST['pid']){
  $str="";
  $str='<select id="down_area" name="down_area">';
 
 $r="select areaid,name from `china_areas` where parentid='".$_REQUEST['pid']."' order by vieworder asc;";
 $q=mysqli_query($dbc,$r);
  while(list($areaid,$name)=mysqli_fetch_array($q,MYSQLI_NUM)){
  
  $str.='<option value="'.$areaid.'">'.$name.'</option>';
  
  }
  
  $str.='</select>';
  
  echo $str;exit;
  }
 ?>
 <!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>无刷新二级联动</title>
 <script src="js/jquery-1.6.2.min.js" type="text/javascript"></script>
 <script language="javascript">
 function down_area(obj){ 
 $.ajax({
    type: "POST",
    url: "area.php",
    data: "do=search&pid="+obj.value,
    success: function(msg){
   $("#area_list").html(msg);
    }
 });
  }
 </script>
 <style>
 body{font:12px Arial, "微软雅黑", sans-serif;color:#666;line-height:22px;}
 </style>
 </head>
 
 <body>
 <p style="height:250px;"> </p>
 <div align="center">
 地区:
 <select id="area" name="area" οnchange="down_area(this);">
 <?
 $r="select areaid,name from `china_areas` where parentid='0' order by vieworder asc;";
 $q=mysqli_query($dbc,$r);
 while(list($areaid,$name)=mysqli_fetch_array($q,MYSQLI_NUM)){
 ?>
 <option value="<?=$areaid;?>"><?=$name;?></option>
 <?
 }
 ?>
 </select>   <span id="area_list"></span>
 </div>
 </body>

效果如图:

下拉选择广东省后:



相关推荐
好,我们现在开始。<br><br>JavaScript代码<br><br><br>--------------------------------------------------------------------------------<br><br><script src="jquery-1.2.1.pack.js" type="text/javascript"></script><br><script type="text/javascript"><br><br>function lookup(inputString) {<br> if(inputString.length == 0) {<br> // Hide the suggestion box.<br> $(‘#suggestions’).hide();<br> } else {<br> $.post("rpc.php", {queryString: ""+inputString+""}, function(data){<br> if(data.length >0) {<br> $(‘#suggestions’).show();<br> $(‘#autoSuggestionsList’).html(data);<br> }<br> });<br> }<br>} // lookup<br><br>function fill(thisValue) {<br> $(‘#inputString’).val(thisValue);<br> $(‘#suggestions’).hide();<br>}<br><br></script><br><br><br>--------------------------------------------------------------------------------<br><br>JS的解释<br><br> 好,从上面的代码看到,我们需要连接到一个叫做rpc.php的文件,这个文件处理所有的操作。<br><br>lookup函数使用从文本输入框中得到的单词然后使用jQueryAjax的方法POST把它传给rpc.php。<br><br>如果输入字符 ‘inputString’是‘0’(Zero,译注:在这里是指在搜索框中没输入任何内容),建议框就被隐藏,这也很人性化,你想,如果在搜索框中没有输入任何东西,你也不期望会出现个建议提示框。<br><br>如果输入框中有内容,我们就得到了这个 ‘inputString’并传递给rpc.php页面,然后jQuery 的$.post()函数被使用,如下:<br><br>$.post(url, [data], [callback])<br><br>‘callback’部分可以关联一个函数,这个比较有意思,只有在数据(data)被加载成功的时候才会执行(译注:此处为意译,没看懂原文:<).<br><br>如果返回的数据(data)不为空(也就是说,有东西要显示),那就显示搜索提示框并且使用返回的数据(data)来代替其中的html代码。<br><br>就这么简单!<br><br>PHP后台程序(rpc.php)<br><br>如你所知(译注:不好意思,看王小波就学会了这么个口头禅),我的php后台程序都叫做rpc.php(RPC指远程过程调用),而没用它实际执行的功能来命名,但是也还不错了。<br><br><br>--------------------------------------------------------------------------------<br><br>// PHP5 Implementation - uses MySQLi. <br>$db = new mysqli(‘localhost’, ‘root’ ,, ‘autoComplete’);<br>if(!$db) {<br> // Show error if we cannot connect.<br> echo ‘ERROR: Could not connect to the database.’;<br>} else {<br> // Is there a posted query string?<br> if(isset($_POST[‘queryString’])) {<br> $queryString = $_POST[‘queryString’];<br> // Is the string length greater than 0?<br> if(strlen($queryString) >0) {<br> // Run the query: We use LIKE ‘$queryString%’<br> // The percentage sign is a wild-card, in my example of countries it works like this…<br> // $queryString = ‘Uni’;<br> // Returned data = ‘United States, United Kindom’; <br> $query = $db->query("SELECT value FROM countries WHERE value LIKE ‘$queryString%’ LIMIT 10");<br> if($query) {<br> // While there are results loop through them - fetching an Object (i like PHP5 btw!).<br> while ($result = $query ->fetch_object()) {<br> // Format the results, im using <li> for the list, you can change it. <br> // The onClick function fills the textbox with the result.<br> echo ‘<li onclick="fill(’‘.$result->value.’‘);">’.$result->value.‘</li>’;<br> }<br> } else {<br> echo ‘ERROR: There was a problem with the query.’;<br> }<br> } else {<br> // Dont do anything.<br> } // There is a queryString.<br>} else {<br> echo ‘There should be no direct access to this script!’;<br>}<br>}<br><br>?><br><br><br>--------------------------------------------------------------------------------<br><br><br><br>PHP代码解释<br><br><br>鉴于代码中我已经加了很多注释,在这里我就不再说的很详细了。<br><br><br>一般情况下,需要接收这个 ‘QueryString’ 然后在其最后使用通配符产生一个查询语句。<br><br><br>这意味着在这种情况下,每次敲进去一个字符都需要产生一个查询语句,如果一直都这样做的话,恐怕MYSQL会受不了。但是为了尽量的简化这个过程,这种做法对一个规模较小的应用应该没什么问题。<br><br><br>这段php代码你需要在自己的系统中稍作修改,比如你需要更新‘$query’到你自己的数据库,需要看在哪里放你数据库表的列名等等。<br><br><br>CSS样式<br><br><br>我使用的是CSS3,天哪,它真的很好用,虽然在Firefox 或者Safari浏览器上会有功能限制。<br><br><br><br>--------------------------------------------------------------------------------<br><br><style type="text/css"> <br>.suggestionsBox {<br> position: relative;<br> left: 30px;<br> margin: 10px 0px 0px 0px;<br> width: 200px;<br> background-color: #212427;<br> -moz-border-radius: 7px;<br> -webkit-border-radius: 7px;<br> border: 2px solid #000;<br> color: #fff;<br>}<br><br>.suggestionList {<br> margin: 0px;<br> padding: 0px;<br>}<br><br>.suggestionList li {<br> margin: 0px 0px 3px 0px;<br> padding: 3px;<br> cursor: pointer;<br>}<br><br>.suggestionList li:hover {<br> background-color: #659CD8;<br>}<br></style><br><br><br>--------------------------------------------------------------------------------<br><br>CSS代码都很标准,没什么需要特别指出的。<br><br><br>主文件HTML<br><br>--------------------------------------------------------------------------------<br><br><div> <br> <div><br><br> Type your county (for the demo):<br><input size="30" id="inputString" onkeyup="lookup(this.value);" type="text" /><br><br> </div> <div class="suggestionsBox" id="suggestions" style="display: none;"><br><br> <img src="upArrow.png" style="position: relative; top: -12px; left: 30px" alt="upArrow" /><br><br> <div class="suggestionList" id="autoSuggestionsList"><br><br></div><br><br> </div><br><br></div><br><br><br>--------------------------------------------------------------------------------<br><br>这是主文件的部分html代码,你需要添加的就是一个输入框,并且把 ‘onkeyup’ 函数设置为lookup(this.value)。另外,我建议你不要修改它的ID,如果你不想修改上面的Javascript代码的话。
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页