item index dropdownlist jquery select drop-down-menu populate

jquery - index - Dropdown populate ajax



select item dropdownlist jquery (2)

Tengo el siguiente problema: cuando selecciono un elemento de un menú desplegable, quiero completar automáticamente otro menú desplegable a través de ajax. la idea es que la subcategoría (sub_type) no se carga después de seleccionar el "tipo".

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); });

Mi script ajax regresa:

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

Pero la subcategoria (selección de secont) no está cargada.


El problema es que estás asignando el html a #sub_type justo después de la llamada ajax JSON. Debe asignarlo en la función de devolución de llamada ajax como esta:

$("#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); }); });


Suponiendo que la función de éxito de Ajax se llame, cambie el código de la función a:

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

Sus principales problemas actualmente son:

  • la función html se llama solo una vez porque está fuera de la función de éxito.
  • los elementos en los datos de Ajax tienen las claves id y nombre y no optionValue y optionDisplay

Actualizar:

El JSON devuelto no es válido. La cadena debe ser comillada con comillas dobles, no comillas simples. Como resultado, la llamada getJSON() falla silenciosamente.