我正在尝试根据在先前的html选择对象上做出的选择来更新html选项列表。我的jquery在下面。这被正确调用。
var brandName = $("#Brand").val();
$.get("updateTypes.php?q="+brandName, function(data) {
$("#Type").remove();
var typeData = JSON.parse(data);
for (loop=0; loop < typeData.length; ++loop) {
$("#Type").options.add(new Option(typeData[loop]));
}
});
当我使用单例与我的mySQL数据库接口时,这个jquery函数调用一个名为updateTypes.php的“中间”.php文件,该文件位于:
include 'databaseInterface.php';
$brand = $_GET["q"];
$typesData = databaseInterface::getBrandTypes($brand);
return $typesData;
这将在我的单例中调用getBrandTypes函数:
$query = "SELECT psTypeName FROM types WHERE brands_psBrandName='$BrandName'";
$result = mysqli_query($con, $query) or die ("Couldn't execute query. ".mysqli_error($con));
$resultArray = array();
while ($row = mysqli_fetch_assoc($result)) {
extract($row);
$resultArray[] = $psTypeName;
}
return json_encode($resultArray);
网页正确删除了jquery函数中的现有选项,但无法更新它们。当我在jquery中解码JSON数据时似乎出错了。为什么会出错?更新选择对象的循环是否合适?
答案 0 :(得分:17)
如果您希望获得json响应,可以使用$.getJSON
。您也可以使用$.each()
,然后使用.append()
select
标记。您可以在this.property
中引用.each()
。
如下所示:
$.getJSON("updateTypes.php?q="+brandName, function(data) {
$("#Type").remove();
$.each(data, function(){
$("#Type").append('<option value="'+ this.value +'">'+ this.name +'</option>')
)
})
这将假设您的json响应类似于以下内容:
[ { name : "foo", value : "bar" }, { name : "another", value : "example" } ]
答案 1 :(得分:12)
您的代码$("#Type").remove();
会删除选择对象而不是其选项。删除选项的正确方法是:
$("#Type option").remove();
或
$("#Type").html('');
第二个解决方案似乎更好,如此处所述:How to remove options from select element without memory leak?
添加新选项的部件中也存在错误。您的javascript代码应为:
var brandName = $("#Brand").val();
$.get("updateTypes.php?q="+brandName, function(data) {
$("#Type option").remove();
var typeData = JSON.parse(data);
for (loop=0; loop < typeData.length; loop++) {
$("#Type").get(0).options.add(new Option(typeData[loop]));
}
});
$('#Type').get(0)
方法指的是具有您想要使用的“options”属性的原始DOM对象(How to get a DOM Element from a JQuery Selector)