我在数据库中有两个表类别和子类别。 在我的表格上,我有两个组合框类别和子类别。现在我希望当我更改类别时,子类别应该相应地改变。如果在javascript中定义数组,我可以这样做。但在我的情况下,子类别是根据所选类别的值从数据库加载。我可以使用php从数据库中获取数据。如果数据在php数组中,我将如何将其传递给javascript。如何在没有ajax的情况下解决这个问题?如果解决方案是JSON,那我怎么能实现json,因为我从未使用它。
答案 0 :(得分:2)
PHP代码是服务器端,首先进行评估,然后处理客户端代码(如Javascript)。因此,您必须预先获取通过PHP切换所需的所有数据,以便通过javascript操作它们。
编辑:
示例:
<?php
$arej[]="one";
$arej[]="two";
$arej[]="three";
$arej[]="four";
?>
<script type="javascript">
var jarray = new Array;
<?php
for($i=0;$i<count($arej); $i++){
echo "jarray[$i]='".$arej[$i]."';";
}
?>
</script>
答案 1 :(得分:1)
要么将所有子类别都放在JavaScript中,要么必须使用Ajax。
将数据从PHP传递到JavaScript非常容易。如果您在数组$subcategories
中有子类别,则可以在JavaScript中安全地使用json_encode($subcategories)
的结果(它 - 或者奇怪 - JSON对您的数组进行编码)。
因此,您要么创建一个返回特定子类别的Ajax服务,要么编写一个PHP脚本来生成包含所有子类别的JavaScript数组。
简单的Ajax服务可能如下所示:
$id = (int)$_GET['category']; // The id of the category
$subcategories = ... // Fetch array of subcategories from db
echo json_encode($subcategories);
因此,每当用户点击另一个类别时,您的JavaScript必须对上面的脚本进行Ajax调用,指定新的类别ID。
如果使用jQuery,那么执行Ajax非常容易。
$.ajax({
url: "subcategories.php?cat=123",
success: function(encoded){
$("#output").append(encoded);
}
});
(上面的示例或多或少直接来自jQuery文档。)要在JavaScript中解析JSON,您可以使用eval()
,但该函数是邪恶的。更好地使用JSON.parse()
或jQuery替代方案。
var subcategories = JSON.parse(encoded);
现在,变量subcategories
包含与包含的PHP脚本中的$subcategories
完全相同的数据结构。