2017-08-08 69 views
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); 
?> 

当我运行代码并从第一个选择框中选择任何东西时,什么都不会发生。我做错了访问第二个选择框?

任何帮助表示赞赏。

+3

您还将值作为'get_param'传递,但尝试使用'$ _GET ['obj']'访问它。你需要改变其中的一个来匹配另一个。 –

+0

那么,我是否只需将数据说明符中的'get_param'更改为'get'?或者我可以完全失去get_param并写入'data:{obj}'? – Basti

+0

您使用的术语与您所谈论的内容不匹配。这是误导(对我来说),也许对你也是。像obj不是一个对象,它是一个值(我猜想是一个字符串)。尽量不要这样做。 ...它是$ .ajax({url:'getforms.php',数据:{obj:obj},dataType:“json”,成功:fillbox}) –

回答

0

谢谢你们,我让它工作。在PHP文件中添加JSON头之后。我不得不改变填充框功能

function fillbox(data) { 
var options = ''; 
for (var x = 0; x < data.length; x++) { 
    options += '<option value="' + data[x] + '">' + data[x] + '</option>'; 
} 
$('#forms').html(options);} 

仍然不明白为什么'.append(new Option())'东西不起作用?