【问题标题】:Dropdown populate ajax下拉填充ajax
【发布时间】:2014-03-27 20:05:15
【问题描述】:

我有以下问题:当我从下拉列表中选择一个元素时,我想通过 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'}]

但是子类(第二个选择)没有加载。

【问题讨论】:

  • 不清楚您遇到了什么问题。你能重申你的问题吗?

标签: jquery select drop-down-menu populate


【解决方案1】:

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

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

您目前的主要问题是:

  • html 函数只被调用一次,因为它在 sucess 函数之外。
  • Ajax 数据中的元素具有键 idname 而不是 optionValueoptionDisplay

更新:

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

【讨论】:

  • 以下是否正确?因为它也不起作用 $("#type").change(function(){ $.getJSON("ajax/add_subcathegory.php",{id: $(this).val(), ajax: 'true' }, function(j){ var $subType = $("#sub_type"); $.each(j, function () { $subType.append($('').attr(" value", this.id).text(this.name)); }); }); });
  • 当你说“它不起作用”时,我猜你的意思是什么都没有发生。请尝试调试失败的地方,以便我们更好地帮助您。查看 Firefox 的 Javascript 控制台(或浏览器中的等效控制台)以查看是否发生 Javascript 错误。如果没有,请使用 Firebug、Fiddler 或类似工具查看网络请求并显示为 Ajax 请求和 Ajax 响应。使用 Firebug,您还可以在成功函数中设置断点以查看它是否被调用。
  • 我正在使用 chrome,所以我可以看到 ajax 响应,并且在运行修改后的脚本时我没有错误
  • 响应:[{"id":"0","name":"Mark"},{"id":"1","name":"Andy"},{id: "2","name":"Richard"}] 结果:没有任何反应
  • 即使是这个:[{id:0,name:"Mark"},{id:1,name:"Andy"},{id:2,name:"Richard"}]
【解决方案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);
  });    
});

【讨论】:

  • 也不起作用:|。 ajax 响应中的空格算不算?
  • 您确定#sub_type 可见吗?尝试调用 $('#sub_type').html('');在 ajax 回调之外查看它是否有效(甚至在 onchange 函数之外)。
猜你喜欢
  • 2012-11-08
  • 1970-01-01
  • 2011-07-17
  • 2017-08-26
  • 2014-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多