0
我对JavaScript和Ajax或JSON没有太多的使用经验,但我目前正在为一个简单的PostgreSQL数据库构建HTML查找工具,而且我是有点卡在这里。 I want to fill the selectbox on the right with corresponding form names from our database whenever the user selects the study in the left selectbox 但是,我有问题来处理从PHP脚本中取回的数组。使用AJAX和JSON填充当前网站上的选择框
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery/3.2.1.min.js"</script>
<script>
function getselect(value) {
$.ajax(
{
type: "GET",
url: 'getforms.php',
data: {value: value},
dataType: "json",
success: fillbox
});
}
function fillbox(data) {
var forms = $('#forms');
var arr = $.parseJSON(data);
for (var x = 0; x < arr.length; x++) {
forms.append(new Option(arr[x]));
}
}
</script>
</head>
<body>
[...]
<?php
$snames = $conn->prepare("SELECT DISTINCT studienname FROM public.fulldict");
$snames->execute();
$a=$snames->fetchAll(PDO::FETCH_COLUMN, 0);
?>
<table border="0">
<tr>
<th>Studien:</th>
<th>Formulare:</th>
</tr>
<tr>
<td>
<select id="study" name="Studien" size="12" onchange="getselect(this.value);">
<?php foreach($a as $option) { ?>
<option value="<?php echo $option ?>"> <?php echo $option ?> </option>
<?php }?>
</select>
</td>
<td>
<select id="forms"></select>
</td>
</tr>
</table>
?>
</body>
</html>
的getforms.php旨在处理SQL查询和发送从数据库中值的数组回的Javascript,其中“fillbox”功能是为了填补选择框从值阵列。
<?php
$f = $_GET['value'];
// Connect to Database
require_once 'dbconfig.php';
$dsn = "pgsql:host=$host;port=5432;dbname=$db;user=$username;password=$password";
$conn = new PDO($dsn);
// Get array with form names
$form_arr=array();
$fnames = $conn->prepare("SELECT DISTINCT formular FROM public.fulldict WHERE studienname = '$f'");
$fnames->execute();
$form_arr=$fnames->fetchAll(PDO::FETCH_COLUMN, 0);
echo json_encode($form_arr);
?>
当我运行代码并从第一个选择框中选择任何东西时,什么都不会发生。我做错了访问第二个选择框?
任何帮助表示赞赏。
您还将值作为'get_param'传递,但尝试使用'$ _GET ['obj']'访问它。你需要改变其中的一个来匹配另一个。 –
那么,我是否只需将数据说明符中的'get_param'更改为'get'?或者我可以完全失去get_param并写入'data:{obj}'? – Basti
您使用的术语与您所谈论的内容不匹配。这是误导(对我来说),也许对你也是。像obj不是一个对象,它是一个值(我猜想是一个字符串)。尽量不要这样做。 ...它是$ .ajax({url:'getforms.php',数据:{obj:obj},dataType:“json”,成功:fillbox}) –