как динамическая функция использует ajax jquery в select2

#javascript #jquery #ajax #jquery-select2

#javascript #jquery #ajax #jquery-select2

Вопрос:

итак, я использую этот код, чтобы все, что имеет элемент $(«.select2»), обрабатывало ajax в соответствии с остальными данными, отправленными через html

 $(".select2").each(function () {
        let element = $(this);

        element.select2({
            theme: "bootstrap",
            placeholder: element.data("placeholder"),
            ajax: {
                url: element.data("url"),
                dataType: 'json',
                delay: 100,
                cache: true,
                data: function (params) { return { q: params.term } },
                processResults: function (data) {
                    return {
                        results:  $.map(data.results, function (item) {
                            return {
                                text:  item.bank_name, /***** this *******/
                                id: item.id /***** this *******/
                            }
                        })
                    };
                }
            },
        });
    })
 

Я добавил элемент.данные («заполнитель») и элемент.данные («url») в jquery, в то время как как отправить их с помощью этого HTML-кода

 <select id="bank_id" name="bank_id" 
     class="fetch_bank form-control select2"
     data-placeholder="Choose Bank" 
     data-url="/api/bank/fetch">
</select>
 

отправка его ajax вернет следующие результаты

 {
    code: 200
    error: false
    message: "loaded!"
    results: [
        {id: 1, bank_name: "AMERICAN EXPRESS BANK LTD"}, 
        {id: 2, bank_name: "ANGLOMAS INTERNASIONAL BANK"},
        ....
    ]
}
 

У меня есть 3 записи, которые возвращают json, для отображения в select2, столбец такой, как показано ниже

 Bank(id, bank_name)
School(id, school_name)
Status(id, status)
 

но проблема в том, как мне сделать ‘processResults’ динамическим? который я пометил комментарием / ***** this ******* /

Хотя 3 данные имеют разные ключи, как мне сделать функцию select2 динамической?

спасибо, я надеюсь, что кто-нибудь ответит на мой вопрос 🙂

Комментарии:

1. Определите в более конкретных терминах, что вы подразумеваете под «сделать это динамичным» . Что вам нужно, чтобы это делалось иначе, чем то, что вы показали? Текущий подход не работает?

2. В вашем коде есть проблема, которая, вероятно, не связана или ошибка копирования-вставки: callback(data.results); находится внутри .map , но после return — поэтому она ничего не делает.

3. Попробуйте $.map(data.results, function(item) { ... }).get() , поскольку results: ожидается массив, а не jquery-массив

4. извините, на самом деле нет callback(data.results) , это просто тестирование

5. У меня есть 3 select2 с разными данными, поэтому вместо того, чтобы создавать 3 select2 (), конечно, код будет длиннее, лучше сделать его динамическим, 1 функция, которую можно использовать несколько раз