Теги Select2 устанавливают значение по функции

У меня есть select2, где мне нужно создавать теги, только если у меня есть разрешение. Мне нужно проверить разрешение ajax по идентификатору пользователя.

Теперь настройка - tags: true, и я ВСЕГДА могу создавать новые теги. (ОК) Если установлен tags: false, я не могу создавать новые теги. (ОК)

Я пробовал использовать теги: function() { return false; }, но кажется, что теги все равно можно создать. (Плохо)

Моя цель - получить что-то вроде этого:

tags: function() {
  $.ajax({
    type: "POST",
    async: false,
    dataType:"json",
    url: "ajax/check_permissione.php",
    data: { 'user-id': 1 },
    success: function(data, status) {
        if ( data.PermissionOK == 1 ) {
            return true;            
        }

        return false;       
    }
  });
}

Но я не знаю, могут ли теги принимать значение от функции?

Мой сценарий:

$("#test").select2({
      tags: true, //  <- if true create new tags, else only select available
      createTag: function (params) {
        return {
          id: params.term,
          text: params.term,
          newOption: true
        }
      },
      templateResult: function (data) {
        var $result = $("<span></span>");
        $result.text(data.text);
        if (data.newOption) {
          $result.append(" <em>(new option)</em>");
        }

        return $result;
      }
}).on('select2:select', function (e) {

  //others operations

});

у вас работает ajax?

david 20.07.2018 09:52

Да, но я пробовал и простые теги: function () {return false; } попробовать и не работает function ()

Giuseppe Lodi Rizzini 20.07.2018 09:55

Я думаю, вам придется повторно инициализировать select2 в зависимости от ответа вашего ajax.

hungrykoala 20.07.2018 09:59

Помимо проблемы, вам необходимо удалить async: false. Он устарел, а также является ужасной практикой, и его поддержка скоро будет прекращена.

Rory McCrossan 20.07.2018 10:09
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
331
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Просто замените tags: true на tags: permission, где permission содержит значение, указывающее, есть ли у идентификатора пользователя разрешение или нет. Если вы проверите разрешение через ajax, вы можете сохранить результат в переменной. Вот иллюстрация.

var permission = true;
$.ajax({
    type: "POST",
    async: false,
    dataType:"json",
    url: "ajax/check_permissione.php",
    data: { 'user-id': 1 },
    success: function(data, status) {
        if ( data.PermissionOK == 1 ) {
            permission = true;
        } else {
            permission = false;
        }
    }
});

Если вы используете ajax, сначала выполните этот код перед использованием select2.

Довожу до вашего сведения. Вы можете реализовать этот способ, если хотите избежать использования async: false. (Используя обещание jQuery)

var permission = true;
var result =
    $.post({
        dataType:"json",
        url: "ajax/check_permissione.php",
        data: { 'user-id': 1 }
    }).done(function(data, status) {
        if ( data.PermissionOK == 1 ) {
            permission = true;
        } else {
            permission = false;
        }
    });

// called when ajax process done.
result.promise().done(function() {
    // $("#test").select2({ ~
});

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