我正在尝试通过PHP用PDO MySQL的结果填充初始客户选择框。然后,我希望第二个联系人选择框更新与第一个框中选择的内容相关的其他信息。我无法让第二个脚本工作。我认为问题出在我的 ajax 脚本中,因为 PHP 脚本在自己运行时工作正常。
主脚本
<html>
<head>
<script type="text/javascript" src="js/jquery-1.11.0.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.10.4.custom.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#contact").change(function(){
var cid = $("#cid").val();
$.ajax({
type:"post",
url:"contact.php",
data:"cid="+cid,
success: function(data) {
$("#contact").html(data);
}
});
});
});
</script>
</head>
<body>
Campaign :
<select name="customer" id="customer">
<option>-Select a Customer-</option>
<?php
include ("function.php");
include("connect.php");
$id = $_SESSION['profile']['id'];
foreach($db->query("SELECT * FROM customers WHERE pid = '$id'") as $row) {
echo "<option value=" . $row['id'] . ">" . $row['name'] . "</option>";
}
?>
</select>
<select name="contact" id="contact">
<option>-Select a Contact-</option>
</select>
</body>
</html>
联系人脚本
include("connect.php");
$cid = $_POST["cid"];
foreach($db->query("SELECT * FROM contact WHERE cid = '$cid'") as $row) {
echo '<option value="'.$row['id'].'">'.$row['name'].'</option>';
也许你的第二个函数应该从#customer
更改开始
我看到您在ajax中使用了联系人选择,而不是您描述的客户。但是您编写的代码,您使用了带有更改事件的联系人选择器,但是联系人选择框仅包含一个值,它如何更改?
<select name="contact" id="contact">
<option>-Select a Contact-</option>
</select>
上一个选择应该有多个选项可以更改。或者我认为你的意思是 #customer 联系如下:-
$("#customer").change(function(){
// your code;
});
<</div>
div class="one_answers"> 为什么不直接使用 id 和名称对 JSON 响应进行编码?
foreach($db->query("SELECT * FROM contact WHERE cid = '$cid'") as $row) {
$arr[] = array("id" => $row['id'], "name" => $row['name']);
}
echo json_encode($arr);
然后在你的 ajax 响应中,你可以做
$(document).ready(function () {
$("#customer").change(function () {
var cid = $("#customer").val();
$.ajax({
type: "post",
url: "contact.php",
data: {cid: cid},
success: function (data) {
var options = [];
$.each(data, function () {
options.push('<option value="' + this.id + '">' + this.name + '</option>');
});
$("#contact").html(options.join(""));
}
});
});
});