У меня есть ряд функций, которые заполняют ряд раскрывающихся списков.
Это страница данных о продукте, которая служит как для добавления нового элемента, так и для редактирования существующего.В последнем случае, когда все раскрывающиеся списки заполнены, он получает данные элемента из базы данных в виде строки JSON и выбирает соответствующие значения в выпадающих списках, используя $('#elem').val('value')
. Все это работает нормально., за исключением того, что я не могу понять это в правильном порядке.
1. function loadBrands() {
2. $('#brand').empty().append('<option value="">Select...</option>').addClass('centreLoader');
3. $.getJSON('/jsonData/brands.txt', function (data) {
4. $.each(data, function (i, item) {
5. $('#brand').append('<option value="' + data[i].label + '">' + data[i].brandName+ '</option>');
6. });
7. $('#brand').removeClass('centreLoader');
8. loadSavedItem();
9. });
10. };
Я добавил номера строк, чтобы объяснить просто (хотя вы все будете знать, что это делает!)
Строка 3 получает данные JSON из моего файла (это действительные данные, поскольку они заполняются нормально), затем строка 4 начинает циклически возвращать возвращаемые данные и заполнять выпадающий список.вызывает функцию loadSavedItem
, которая выглядит примерно так:
1. function loadSavedItem(thisItemId) {
2. $.getJSON('/jsonData/QUERY_DB_FOR_THIS_PRODUCT (thisItemId)', function (data) {
3. $('#brand').val(data[0].brand);
4. });
5. };
Опять, довольно просто, строка 2 получает вывод JSON (который снова действителен, он отлично заполняет другие поля) и устанавливает значения полейв зависимости от обстоятельств (это, очевидно, сокращенная версия кода)
Проблема заключается в том, что loadSavedItem()
вызывается слишком рано, до полного заполнения #brands
, поэтому он не может установитьоцените правильно.Если я поставлю задержку, то это сработает.
НО ... Я думал, что после оператора $(each...
jQuery ничего не должно произойти, пока не закончится $(each)
?
Как я могу убедиться, что это так?