下拉填充ajax

时间:2011-08-17 10:11:11

标签: jquery select drop-down-menu populate

我有以下问题:当我从下拉列表中选择一个元素时,我想通过ajax自动填充另一个下拉列表。我们的想法是,在选择“类型”后,子类别(sub_type)不会加载。

HTML
<select id="type" name="type">
<option value="1">General</option>
<option value="2">Test</option>
</select>
<select id="sub_type" name="sub_type">
</select>


SCRIPT
    $("#type").change(function(){
    $.getJSON("ajax/add_subcathegory.php",{id: $(this).val(), ajax: 'true'}, function(j){
          var options = '';
          for (var i = 0; i < j.length; i++) {
            options += '<option value="' + j[i].id+ '">' + j[i].name+ '</option>';
          }
        });
    $("#sub_type").html(options);
    });

我的ajax脚本返回:

[{id: 0, name: 'Mark'}, {id:1, name: 'Andy'}, {id:2, name: 'Richard'}]

但是subcathegory(secont select)没有加载。

2 个答案:

答案 0 :(得分:13)

假设确实调用了Ajax成功函数,请将函数代码更改为:

          var $subType = $("#sub_type");
          $subType.empty();
          $.each(j, function () {
            $subType.append($('<option></option>').attr("value", this.id).text(this.name));
          });

您目前的主要问题是:

  • html函数只被调用一次,因为它在成功函数之外。
  • Ajax数据中的元素具有键 id name 而不是 optionValue optionDisplay

<强>更新

返回的JSON无效。字符串必须引用双引号,而不是单引号。结果,getJSON()调用无声地失败。

答案 1 :(得分:2)

问题是,您在ajax JSON调用之后立即将html分配给#sub_type。您应该在ajax回调函数中分配它,如下所示:

$("#type").change(function(){
  $.getJSON("ajax/add_subcathegory.php",{id: $(this).val(), ajax: 'true'}, function(j){
    var options = '';
    for (var i = 0; i < j.length; i++) {
      options += '<option value="' + j[i].id + '">' + j[i].name + '</option>';
    }
    $("#sub_type").html(options);
  });    
});