使用jquery和ajax </select>更新<select>选项列表

时间:2013-06-29 21:07:31

标签: php jquery ajax json

我正在尝试根据在先前的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数据时似乎出错了。为什么会出错?更新选择对象的循环是否合适?

2 个答案:

答案 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