Добавить параметры для выбора из объекта JSON

Мне нужно получить возможные варианты выбора с другого сервера, поэтому я использую AJAX, в результате я получаю json, а response.experience выглядит как

Добавить параметры для выбора из объекта JSON

HTML

<select class = "form-control" name = "experience" id = "experience"></select>

jQuery

$.ajax({
        method: 'GET',
        url: 'https://example.com/dictionaries/',
    })
    .done(function (response) {
        console.info(response.experience);

        $.each(response.experience, function (key, value) {
            $('#experience')
                .append($("<option></option>")
                    .attr("value", key)
                    .text(value));
        });
    });

Но после append я получаю объект Object в настройках

Добавить параметры для выбора из объекта JSON

Как создать варианты в моем случае? А как добавить attr selected для первого варианта?

$. каждый первый аргумент - это ваш индекс, а второй аргумент - ваш объект. поэтому вам нужно получить его по value.id или value.name

Negi Rox 21.03.2018 07:20
Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
0
1
56
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вам не нужно использовать $.each для прохождения массива, вместо этого используйте array.forEach() или array.map(), как это:

$.ajax({
        method: 'GET',
        url: 'https://example.com/dictionaries/',
    })
    .done(function (response) {
        console.info(response.experience);
        // using map
        $('#experience').append(
            response.experience.map(function (obj) {
                return $("<option/>")
                    .attr("value", obj.id)
                    .text(obj.name));
            })
        );
        // using forEach
        response.experience.forEach(function (obj) {
            $('#experience')
                .append(
                    $("<option></option>")
                        .attr("value", obj.id)
                        .text(obj.name)
                );
        });
    });

Не могли бы вы привести пример с forEach? А как добавить attr selected для первого варианта?

Heidel 21.03.2018 07:24

@Heidel Я добавил пример forEach, но рассмотрите возможность использования map, потому что это более эффективное решение, поскольку оно вносит только одну модификацию в DOM

iamawebgeek 21.03.2018 07:34

Спасибо, буду иметь ввиду! Я пытался использовать ваш код с map, но что-то не так с) или} в конце функции, но я не могу понять, в чем проблема.

Heidel 21.03.2018 07:38

Обновлено: вы почти близки к решению. Пожалуйста, замените value на value.name в атрибутах опций. Вот рабочий код.

   $.ajax({
        method: 'GET',
        url: 'https://example.com/dictionaries/',
    })
    .done(function (response) {
        console.info(response.experience);

        $.each(response.experience, function (key, value) {
            $('#experience')
                .append($("<option></option>")
                    .attr("value", value.name)
                    .text(value.name));
        });
    });

из данного ответа ajax, что должно присутствовать в параметрах выбора. Я мог видеть имя, идентификатор и т. д. Если name, используйте value.name. Я обновил свой ответ, пожалуйста, проверьте его.

CodeZombie 21.03.2018 07:38

Вы выполняете итерацию по массиву, содержащему объект, и добавляете объекты в список выбора. Возможно, вам потребуется добавить один из ключей объекта, например: 'id'. И функция обратного вызова функции $.each примет два параметра, текущий индекс и значение. Первым параметром всегда будет index. Отредактируйте свой код ajax, как показано ниже:

$.ajax({
    method: 'GET',
    url: 'https://example.com/dictionaries/',
})
.done(function (response) {
    console.info(response.experience);

    $.each(response.experience, function (index,value) {
        $('#experience')
            .append($("<option></option>")
                .attr("value", value.id) //To append id of the json object to select list
                .text(value.id));
    });
    $('#experience').val(response.experience[0].id) // To add the selected attribute for the first option
});

Другие вопросы по теме