我有一个HTML列表框,我希望能够在该列表框中选择任何值,并根据该选择更新第二个包含PHP数据库查询的列表框。
我尝试过的选项:
- 我尝试过使用JSON。我使用Javascript更新第二个列表框并调用外部PHP脚本,但返回的PHP值将是一个数组,并且不能很好地转换为Javascript。
- 我无法使用Cookie,因此我使用HTML会话。在第一个列表框中选择值时,它会更新会话值并刷新页面。在重新加载时,页面使用Session值来更新第二个列表框,但我无法使用Javascript通过调用onChange =“function();使用第一个列表框”更新HTML Session与第一个列表框的选定值
还有其他可用的选项来实现吗?或者我如何修复其中一个选项才能使其工作?
答案 0 :(得分:1)
你说你曾经尝试过使用JSON,但你显然并不完全明白这意味着什么。 JSON只是一种格式化字符串的方式,任何具有解析器的机器都可以普遍理解它。 PHP值是一个“数组”,因此不可转换的想法是没有意义的;重要的是它是JSON format发送给客户的。
如果PHP中有数组,可以使用json_encode
函数将其转换为JSON格式:
<?php
my_arr = array('a' => 'b', 'c' => 'd');
// do stuff to fill array
echo json_encode($my_arr);
?>
当您在JavaScript代码中以JSON格式收到它时,您可以将其解析为JavaScript对象 - 有关详细信息,请参阅this question。
答案 1 :(得分:1)
所以这就是我如何使用ajax来做到这一点。我有一个onChange事件将列表的值传递给隐藏的输入。然后我会按以下方式发布输入。
var params = $('#hiddenInputId').serialize();
$.post('post.php', params, function(data){
if(data.match(/^[\r\n\s]*OK=/)) {
$('#listOut').html(data.slice(data.indexOf('OK=') + 3));
}
else if(data.match(/^[\r\n\s]*ERRORS=/)) {
alert(data.slice(data.indexOf('ERRORS=') + 7));
}
});
#listOut会指向您要用返回选择列表填写的范围或内容。你可以在post.php页面上设置一个if语句来监听隐藏输入的提交并返回正确的值。
if(isset($_POST['hiddenInputName'])){
$query = "SELECT * FROM table WHERE something LIKE'" . $_POST['hiddenInputName']."';";
$result = mysql_query($query) or die(mysql_error());
echo 'OK=created Select: <select>';
while($row = mysql_fetch_array($result)){
echo"<option value='" . $row['field_name'] . "'>" . $row['field_name'] ."</option>";
}
}
echo "</select>";
}