HTML Listbox使用PHP更新另一个Listbox

时间:2012-11-12 16:20:24

标签: php javascript html

我有一个HTML列表框,我希望能够在该列表框中选择任何值,并根据该选择更新第二个包含PHP数据库查询的列表框。

我尝试过的选项:

- 我尝试过使用JSON。我使用Javascript更新第二个列表框并调用外部PHP脚本,但返回的PHP值将是一个数组,并且不能很好地转换为Javascript。

- 我无法使用Cookie,因此我使用HTML会话。在第一个列表框中选择值时,它会更新会话值并刷新页面。在重新加载时,页面使用Session值来更新第二个列表框,但我无法使用Javascript通过调用onChange =“function();使用第一个列表框”更新HTML Session与第一个列表框的选定值

还有其他可用的选项来实现吗?或者我如何修复其中一个选项才能使其工作?

2 个答案:

答案 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>";
}