我有这个Java脚本:
$("#judet div.jqTransformSelectWrapper ul li a").click(function(){
var jud= $("#judetul1").val();
$.ajax({
type: "POST",
url: "rental/cms/inc/ajax/cities.php",
data: { 'jud': jud },
success: function (msg) {
$("#oras").html(msg);
},
error: function (xhr, err) {
alert("readyState: " + xhr.readyState + "'nstatus: " + xhr.status);
alert("responseText: " + xhr.responseText);
}
});
});
和这个 html:
<div class=" h">
<span class="block">Orasul</span>
<div class="select6" id="oras">
<select name="oras1" id="oras1" onchange="zone1();sectorul();">
</select>
</div>
<div class="clear"></div>
</div>
<div class="clear"></div>
而这个 php:
public function get_oras($code3) {
echo "<option selected='selected' value='0'>Alege oras</option>";
$code='PPLA';
$code2='PPLA2';
$sql="SELECT * FROM `locatii` WHERE (`feature_code`=:code OR `feature_code`=:code2) AND `admin1_code`=:code3 ORDER BY `asciiname` ASC";
$stmt = $this->dbh->prepare($sql);
$stmt->bindParam(':code', $code, PDO::PARAM_STR, 30);
$stmt->bindParam(':code2', $code2, PDO::PARAM_STR, 30);
$stmt->bindParam(':code3', $code3, PDO::PARAM_INT);
$stmt->execute();
foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $result)
{
$oras[]="<option value='".$result['geonameid']."'>".$result['asciiname']."</option>";
}
return $oras;
}
HTML for Judetul:
<div class=" h">
<span class="block">Judetul</span>
<div class="select6" id="judet">
<?php $judetul=$db->get_judet(); ?>
<select name="judetul1" id="judetul1" >
<option selected="selected">---</option>
<?php foreach ($judetul as $val=>$k) { ?>
<option value="<?php echo $val; ?>"><?php echo $k; ?></option>
<?php } ?>
</select>
</div>
<div class="clear"></div>
</div>
<div class="clear"></div>
问题是:当我更改 judetul1 时,我需要填充 oras1。当我更改 judetul1 选项时,选择 oras1 不会从 db 获取值。
我该如何解决它?
我看到您的代码中有两件事可能会导致问题。
首先,在你的HTML中,你不要把从ajax收到的值放在"#oras1"中,而是放在"#oras"中:
success: function (msg) {
$("#oras").html(msg); // use $("#oras1").html(msg);
},
其次,你应该把你的PHP改成这样的东西:
public function get_oras($code3) {
$oras .= "<option selected='selected' value='0'>Alege oras</option>"; // make change here
$code='PPLA';
$code2='PPLA2';
$sql="SELECT * FROM `locatii` WHERE (`feature_code`=:code OR `feature_code`=:code2) AND `admin1_code`=:code3 ORDER BY `asciiname` ASC";
$stmt = $this->dbh->prepare($sql);
$stmt->bindParam(':code', $code, PDO::PARAM_STR, 30);
$stmt->bindParam(':code2', $code2, PDO::PARAM_STR, 30);
$stmt->bindParam(':code3', $code3, PDO::PARAM_INT);
$stmt->execute();
foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $result)
{
$oras .="<option value='".$result['geonameid']."'>".$result['asciiname'].</option>"; // make change here
}
return $oras;
}
在你向 JavaScript 发送一个普通的 PHP 数组之前,这永远不起作用。因此,它需要像JSON这样的"序列化"。在您的情况下,最简单的解决方案就是将所有内容放入字符串中并返回。AJAX 将是一个字符串,您可以简单地注入到 HTML 中。另一种解决方案是回显字符串的每个部分。
这是我之前开发选择框时遇到的问题。
这里可能会发生两件事。1. 在 judetul1 中未触发 onchange 事件。如果要检查这一点,只需打开浏览器的调试并在"网络"中观察,然后查看是否向其他页面发送请求以从数据库获取值。
注意:onchange 在某些版本的 jqtransform 中是一个问题
2.问题可能是jqtransform只"美化"您的选择输入一次(可能在文档准备好的时候)。当您在 judetul1 中更改选项时,它会更新 oras1 选择框中的选项列表。但是,由于您不会再次调用 jqtransform 来再次"美化"您的选择输入,因此选项文本不会根据需要更新。
如果您仍然需要修复此问题,确实有解决方案。