#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 функция, которую можно использовать несколько раз