Я пытаюсь загрузить категории из одного стола, а затем материалы из второго, используя Jquery, чтобы использовать категорию в качестве группы opt и группы в качестве опций. У меня есть следующий код:JQuery - динамически добавить optgrounp
$.ajax({
type: "POST",
dataType: "json",
data: '',
url: "select_cat.php",
success: function(cat_data) {
var sel = $("#material_select");
sel.empty();
for (var cat_i=0; cat_i<cat_data.length; cat_i++) {
// Print header
sel.append('<optgroup label=' +cat_data[cat_i].cat_displayname+ '>');
// Get materials from category
$.ajax({
type: "POST",
dataType: "json",
data: 'current_material_cat=' + cat_data[cat_i].cat_id,
url: "select_mat.php",
success: function(data) {
for (var i=0; i<data.length; i++) {
sel.append('<option value="' + data[i].value + '">' + data[i].displayname + '</option>');
}
}
});
}
$("#material_select").prop("selectedIndex", 0);
}
});
Однако отображает все optgroups первые затем материалы
Что я делаю неправильно?
Вы также можете изменить внутренний вызов ajax как синхронный, установив опцию 'async' на' false' - вам все равно нужно добавить в группу параметров. – lemieuxster
Спасибо! Обе работы, но есть ли какие-либо преимущества/недостатки, использующие async: false вместо «$ .each»? – satori
В целом 'async: false' - очень плохая идея. Вместо этого используйте объект обещания, встроенный в функцию '$ .ajax()' jQuery', и используйте '$ .when()'. – Terry