gpt4 book ai didi

javascript - 在级联选择框中从数据库中获取数据

转载 作者:行者123 更新时间:2023-11-28 03:16:36 25 4
gpt4 key购买 nike

我发布了我的整个代码,因为我无法找到错误所在,所以请原谅我的长代码。

我有一个包含 2 个下拉列表的页面。第二个列表取决于从第一个列表中选择的值。

index.php页面

<head>
<script language="JavaScript" src="functionsjq.js"></script>
<script language="JavaScript" src='http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js'></script>
<script>
jQuery().ready(function($){
$('#loading')
.hide() // hide it initially
.ajaxStart(function() {
$(this).show();
})
.ajaxStop(function() {
$(this).hide();
})
;
jQuery.ajax({
url: 'man_list.php',
global: false,//
type: "POST",
dataType: "xml",
async: false,
success: populateComp
});

$("#manufacturer").change(function ()
{
resetValues();
var data = { man :$(this).attr('value') };
jQuery.ajax({
url: 'type_list.php',
type: "POST",
dataType: "xml",
data:data,
async: false,
success: populateType
});
});
});
</script>

<style>
#loading{
background:url('loader64.gif') no-repeat;
height: 63px;
}
</style>
</head>
<body >
<p>Manufacturer:<select name="manufacturer" id="manufacturer" ><option value="">Please select:</option></select>&nbsp;
Printer type: <select name="printertype" id="printertype" disabled="disabled" ><option value="">Please select:</option></select>&nbsp;</p>
<div id="loading" style="display: none;"></div>
<div id="output" ></div>
</body>

函数jq.js

function resetValues() {
$('#printertype').empty();
$('#printertype').append(new Option('Please select', '', true, true));
$('#printertype').attr("disabled", "disabled");
}

function populateComp(xmlindata) {

var mySelect = $('#manufacturer');
$('#printertype').disabled = false;
$(xmlindata).find("Company").each(function()
{
optionValue=$(this).find("id").text();
optionText =$(this).find("name").text();
mySelect.append($('<option></option>').val(optionValue).html(optionText));
});
}

function populateType(xmlindata) {

var mySelect = $('#printertype');
$('#printertype').removeAttr('disabled');
$(xmlindata).find("Printertype").each(function()
{
optionValue=$(this).find("id").text();
optionText =$(this).find("name").text();
mySelect.append($('<option></option>').val(optionValue).html(optionText));
});
}

man_list.php

<?php
// manufacturer_list
include("dbconfig.inc.php");

header("Content-type: text/xml");
echo "<?xml version=\"1.0\" ?>\n";
echo "<companies>\n";
$select = "SELECT * FROM search_parent";
try {
foreach($dbh->query($select) as $row) {
echo "<Company>\n\t<id>".$row['id']."</id>\n\t<name>".$row['searchname']."</name>\n</Company>\n";
}
}
catch(PDOException $e) {
echo $e->getMessage();
die();
}
echo "</companies>";
?>

类型列表

<?php
include("dbconfig.inc.php");

header("Content-type: text/xml");

$manid = $_POST['man'];

echo "<?xml version=\"1.0\" ?>\n";
echo "<printertypes>\n";
$select = "SELECT id, fname FROM features WHERE parent_id = '".$manid."'";
try {
foreach($dbh->query($select) as $row) {
echo "<Printertype>\n\t<id>".$row['id']."</id>\n\t<name>".$row['fname']."</name>\n</Printertype>\n";
}
}
catch(PDOException $e) {
echo $e->getMessage();
die();
}
echo "</printertypes>";
?>

表格 View

搜索父级

id   searchname
1 abc

features(parent_id为search_parent表的id)

id  fname  parent_id
1 xyz 1

当我从第一个下拉列表中选择任何值时,我会在第二个下拉列表中得到相应的值,但问题是当我从第一个下拉列表中选择第一个值时,我没有得到任何对应的值在我的第二个下拉列表中为它赋值,无论第一个下拉列表的第一个位置的值是什么。我在第二个菜单中没有得到任何值(value)

最佳答案

根据您的最后评论,我怀疑问题是由于您在现在已弃用的 ajax 调用中使用 async:false 引起的,请参阅 the docs

我会做的是直接在 php 中加载制造商列表,因为使用 ajax 这样做效率低下,因为 ajax 请求会给服务器带来额外的负载

Manufacturer:<select name="manufacturer" id="manufacturer" >
<option value="">Please select:</option>
<?php
foreach($dbh->query($select) as $row) {
echo "<Company>\n\t<id>".$row['id']."</id>\n\t<name>".$row['searchname']."</name>\n</Company>\n";
}
?>
</select>

使用 async:false 无论如何都是不好的做法,因为它会在请求期间锁定 ui

这是一个good post关于正确处理 ajax 响应

关于javascript - 在级联选择框中从数据库中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27315173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com