阿贾克斯+ PHP实现级联选择 [英] Ajax+PHP to implement cascading select
问题描述
我有一个demo.html页面,其中包含两个选项,第一个是类型,而第二个是配置,当我选择一个特定类型的第一选择,我想使用Ajax更新该第二选择的值。 例如,类型可能有值:虚拟机,服务器,DCA 和VM只有配置燎节点,但DCA具有配置D0 - D48。所以,如果我在第一个选项中选择DCA,我应该有49个选项中的第二个。
我在网上搜索,并没有找到一些解决办法,然后我用我自己写了一些code。现在的问题是,无论我选择的第一选择,第二个将不被更新,它总是返回null。
不知道在哪里的概率是,在code看起来罚款:(感谢您的帮助。
演示页
< HTML>
< HEAD>
<元字符集=utf-8>
<冠军>订座系统和LT; /标题>
<链接HREF =的jquery / UI / CSS /晴天/ jQuery的-UI-1.8.16.custom.css相对=样式类型=文本/ CSS>
<链接HREF =jQuery的/数据表/ CSS / MRBS-page.css相对=样式类型=文本/ CSS>
<链接HREF =jQuery的/数据表/ CSS / MRBS-table.css相对=样式类型=文本/ CSS>
<链接HREF =jQuery的/数据表/ CSS / ColReorder.css相对=样式类型=文本/ CSS>
<链接HREF =jQuery的/数据表/ CSS / ColVis.css相对=样式类型=文本/ CSS>
<链接相对=样式表的href =CSS / mrbs.css.php类型=文本/ CSS>
<链接相对=样式媒体=打印的href =CSS / MRBS-print.css.php型=文本/ CSS>
< META NAME =机器人CONTENT =NOINDEX>
<脚本类型=文/ JavaScript的SRC =的jQuery / jQuery的-1.7.2.min.js>< / SCRIPT>
<脚本类型=文/ JavaScript的SRC =的jquery / UI / jQuery的-UI-1.8.22.custom.min.js>< / SCRIPT>
<脚本类型=文/ JavaScript的SRC =的jquery / UI / jQuery的-UI-i18n.js>< / SCRIPT>
<脚本类型=文/ JavaScript的SRC =的jquery / UI / jQuery的-UI-日期选择器,en.js>< / SCRIPT>
<脚本类型=文/ JavaScript的SRC =的jquery / UI / jQuery的-UI-日期选择器烯US.js>< / SCRIPT>
<脚本类型=文/ JavaScript的SRC =jQuery的/数据表/ JS / jquery.dataTables.min.js>< / SCRIPT>
<脚本类型=文/ JavaScript的SRC =jQuery的/数据表/ JS / ColReorder.min.js>< / SCRIPT>
<脚本类型=文/ JavaScript的>
VAR XMLHTTP;
VAR URL;
功能createXMLHtt prequest(){
如果(window.XMLHtt prequest)
XMLHTTP =新XMLHtt prequest();
其他
XMLHTTP =新的ActiveXObject(Microsoft.XMLHTTP);
}
功能showConfig(STR){
URL =?getOptions.php TYPE =+ STR;
createXMLHtt prequest();
xmlhttp.open(GET,URL,真正的);
xmlhttp.send(空);
xmlhttp.onreadystatechange =功能(){handleStateChange()};
}
功能handleStateChange(){
如果(xmlhttp.readyState == 4和&安培; xmlhttp.status == 200)
{
VAR海峡= xmlhttp.responseText;
警报(URL);
createConfig(STR);
}
}
功能createConfig(STR){
VAR的configs =海峡;
变种配置= configs.split(,);
而(的document.getElementById(配置)options.lengt> 0)
。的document.getElementById(配置)options.remove(0);
对于(VAR I = 0; I< config.length;我++)
{
VAR ooption = document.createElement方法(选项);
ooption.value =配置[I]
ooption.text =配置[I]
。的document.getElementById(配置)增加(ooption);
}
}
< / SCRIPT>
<形式ID =add_room级=form_admin行动=add.php方法=邮报>
<字段集>
<传奇>添加DCA< /传说>
<输入类型=隐藏名称=输入值=房间>
<输入类型=隐藏名称=区域值=2>
< DIV>
<标签=ROOM_NAME>名称:< /标签>
<输入类型=文本ID =ROOM_NAMENAME =名称最大长度=50>
< / DIV>
< DIV>
<标签=room_description>简介:< /标签>
<输入类型=文本ID =room_descriptionNAME =说明最大长度=100>
< / DIV>
< DIV>
<标签=room_type>型号:LT; /标签>
<选择类=room_area_selectID =type_selectNAME =区域的onchange =showConfig(THIS.VALUE)><期权价值=VM> VM< /选项><期权价值= 服务器>服务器16; /选项><期权价值=DCA-V1> DCA-V1< /选项><期权价值=DCA-V2> DCA-V2< /选项>< /选择>
< / DIV>
< DIV>
<标签=配置>配置:其中; /标签>
<选择一个id =配置>< /选择>
< / DIV>
< /字段集>
< /形式GT;
getOptions.php文件
< PHP
$型= $ _GET ['类型'];
回声$类型;
$结果=;
如果($类型==DCA-V1){
为($ i = 0; $ I< 47,$ ++)
。$结果= $ I,;
$结果=48。
}
否则,如果($类型==服务器)
。$结果=单点;
否则,如果($类型==VM){
。$结果=单一主机;
}
回声$结果;
?>
因为你已经在你的页面使用jQuery,我建议jQuery的AJAX选项。
下面应该工作。相应地更新它。
getOptions.php
< PHP
$型= $ _GET ['类型'];
$结果=;
如果($类型==DCA-V1){
为($ i = 0; $ I< 47; $ I ++)
。$结果= $ I,;
$结果=48。
}否则,如果($类型==服务器){
。$结果=单点;
}否则,如果($类型==VM){
。$结果=单一主机;
}
回声$结果;
?>
演示页
< HTML>
< HEAD>
<脚本类型=文/ JavaScript的SRC =jQuery的-1.7.2.min.js>< / SCRIPT>
<脚本类型=文/ JavaScript的>
$(文件)。就绪(函数(){
$('#type_select')。改变(函数(){
//获取当前项目的值
VAR型= $(本).VAL();
$阿贾克斯({
网址:getOptions.php TYPE =+型,
成功:功能(数据){
VAR的结果,选择采用=;
//我们得到逗号分隔数据
结果= data.split(,);
// prepare选项
对于(VAR I = 0; I< result.length;我++){
OPTS + =<期权价值='+结果[我] +>中+结果[我] +< /选项>中;
}
//填充第二选择
$('#配置)HTML(选)。
},
错误:函数(){
警报(错误);
}
});
});
//默认情况下填充为当前所选项目的选项
$('#type_select)触发('改变')。
});
< / SCRIPT>
< /头>
<身体GT;
<形式ID =add_room级=form_admin行动=add.php方法=邮报>
<字段集>
<传奇>添加DCA< /传说>
<输入类型=隐藏名称=输入值=房间>
<输入类型=隐藏名称=区域值=2>
< DIV>
<标签=ROOM_NAME>名称:< /标签>
<输入类型=文本ID =ROOM_NAMENAME =名称最大长度=50>
< / DIV>
< DIV>
<标签=room_description>简介:< /标签>
<输入类型=文本ID =room_descriptionNAME =说明最大长度=100>
< / DIV>
< DIV>
<标签=room_type>型号:LT; /标签>
<选择类=room_area_selectID =type_selectNAME =区域>
<期权价值=VM> VM< /选项>
<期权价值=服务器>服务器16; /选项>
<期权价值=DCA-V1> DCA-V1< /选项>
<期权价值=DCA-V2> DCA-V2< /选项>
< /选择>
< / DIV>
< DIV>
<标签=配置>配置:其中; /标签>
<选择一个id =配置>< /选择>
< / DIV>
< /字段集>
< /形式GT;
< /身体GT;
< / HTML>
尝试提供一些意见。
让我们知道,如果你需要任何帮助。
I have a demo.html page, which contains two selections, the first one is "Type", and the second one is "Config", when I choose a certain type in the first selection, I want to use ajax to update the values in the second selection. For example, Type may have values: VM, Server, DCA and VM only has config "singe node", but DCA has Config "d0"-"d48". so if I select DCA in the first selection, I should have 49 options in the second one.
I searched online and did find some solutions, then I wrote some code by myself. The problem now is that whatever I select in the first selection, the second one will not be updated, it always return null.
Not sure where the prob is, the code looks fine :( Thanks for any help.
demo page
<html>
<head>
<meta charset="utf-8">
<title>Reservation System</title>
<link href="jquery/ui/css/sunny/jquery-ui-1.8.16.custom.css" rel="stylesheet" type="text/css">
<link href="jquery/datatables/css/mrbs-page.css" rel="stylesheet" type="text/css">
<link href="jquery/datatables/css/mrbs-table.css" rel="stylesheet" type="text/css">
<link href="jquery/datatables/css/ColReorder.css" rel="stylesheet" type="text/css">
<link href="jquery/datatables/css/ColVis.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" href="css/mrbs.css.php" type="text/css">
<link rel="stylesheet" media="print" href="css/mrbs-print.css.php" type="text/css">
<meta name="robots" content="noindex">
<script type="text/javascript" src="jquery/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="jquery/ui/jquery-ui-1.8.22.custom.min.js"></script>
<script type="text/javascript" src="jquery/ui/jquery-ui-i18n.js"></script>
<script type="text/javascript" src="jquery/ui/jquery-ui-datepicker-en.js"></script>
<script type="text/javascript" src="jquery/ui/jquery-ui-datepicker-en-US.js"></script>
<script type="text/javascript" src="jquery/datatables/js/jquery.dataTables.min.js"></script>
<script type="text/javascript" src="jquery/datatables/js/ColReorder.min.js"></script>
<script type="text/javascript">
var xmlhttp;
var url;
function createXMLHttpRequest() {
if (window.XMLHttpRequest)
xmlhttp = new XMLHttpRequest();
else
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
function showConfig(str) {
url = "getOptions.php?type="+str;
createXMLHttpRequest();
xmlhttp.open("GET",url,true);
xmlhttp.send(null);
xmlhttp.onreadystatechange = function() {handleStateChange()};
}
function handleStateChange() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
var str = xmlhttp.responseText;
alert (url);
createConfig(str);
}
}
function createConfig(str) {
var configs = str;
var config = configs.split(",");
while (document.getElementById("config").options.lengt>0)
document.getElementById("config").options.remove(0);
for (var i=0; i<config.length; i++)
{
var ooption = document.createElement("option");
ooption.value = config[i];
ooption.text = config[i];
document.getElementById("config").add(ooption);
}
}
</script>
<form id="add_room" class="form_admin" action="add.php" method="post">
<fieldset>
<legend>Add DCA</legend>
<input type="hidden" name="type" value="room">
<input type="hidden" name="area" value="2">
<div>
<label for="room_name">Name:</label>
<input type="text" id="room_name" name="name" maxlength="50">
</div>
<div>
<label for="room_description">Description:</label>
<input type="text" id="room_description" name="description" maxlength="100">
</div>
<div>
<label for="room_type">Type:</label>
<select class="room_area_select" id="type_select" name="area" onchange="showConfig(this.value)"><option value="VM">VM</option><option value="Server">Server</option><option value="DCA-V1">DCA-V1</option><option value="DCA-V2">DCA-V2</option></select>
</div>
<div>
<label for = "config">config:</label>
<select id="config" ></select>
</div>
</fieldset>
</form>
getOptions.php file
<?php
$type = $_GET['type'];
echo $type;
$result = "";
if ($type == "DCA-V1") {
for ($i=0;$i<47;$++)
$result .= $i.",";
$result .= "48";
}
else if ($type == "Server")
$result .= "single node";
else if ($type == "VM") {
$result .= "single host";
}
echo $result;
?>
As you are already using jQuery in your page, I suggest jQuery's ajax option.
Following should work. Update it accordingly.
getOptions.php
<?php
$type = $_GET['type'];
$result = "";
if ($type == "DCA-V1") {
for ($i=0;$i<47;$i++)
$result .= $i.",";
$result .= "48";
} else if ($type == "Server") {
$result .= "single node";
} else if ($type == "VM") {
$result .= "single host";
}
echo $result;
?>
Demo Page
<html>
<head>
<script type="text/javascript" src="jquery-1.7.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#type_select').change(function() {
//Get current item's value
var type = $(this).val();
$.ajax({
url : "getOptions.php?type=" + type,
success : function(data) {
var result, opts = "";
//We get comma separated data
result = data.split(',');
//Prepare options
for(var i = 0; i < result.length; i++) {
opts += "<option value='" + result[i] + "'>" + result[i] + "</option>";
}
//Populate second select
$('#config').html(opts);
},
error : function() {
alert("Error");
}
});
});
//By default populate options for currently selected item
$('#type_select').trigger('change');
});
</script>
</head>
<body>
<form id="add_room" class="form_admin" action="add.php" method="post">
<fieldset>
<legend>Add DCA</legend>
<input type="hidden" name="type" value="room">
<input type="hidden" name="area" value="2">
<div>
<label for="room_name">Name:</label>
<input type="text" id="room_name" name="name" maxlength="50">
</div>
<div>
<label for="room_description">Description:</label>
<input type="text" id="room_description" name="description" maxlength="100">
</div>
<div>
<label for="room_type">Type:</label>
<select class="room_area_select" id="type_select" name="area">
<option value="VM">VM</option>
<option value="Server">Server</option>
<option value="DCA-V1">DCA-V1</option>
<option value="DCA-V2">DCA-V2</option>
</select>
</div>
<div>
<label for = "config">config:</label>
<select id="config" ></select>
</div>
</fieldset>
</form>
</body>
</html>
Tried providing some comments.
Let us know if you need any help.
这篇关于阿贾克斯+ PHP实现级联选择的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!