当你有 php 功能时,用 ajax post 更新 select2

Update select2 with ajax post when you have php function

我有一个名为 demclients 的 div,它会在 ajax post 之后刷新。如果 ajax post 运行,它会创建一个新的客户端。我想更新 select 字段,这样我就可以 select 我刚创建的新客户端。

    <div class="demclients">
     <div class="form-group">
           <label class="col-md-4 control-label" for="textinput">Klant zoeken</label>
           <div class="col-md-4">
                 <select id="allclients" style="width:300px;" name="client" required>
                     <?php foreach($user->getAllClients() as $klant) { ?>
                         <option value="<?= $klant['id']?>"><?= $klant['naam']?></option>
                     <?php } ?>
                 </select>
            </div>
     </div>
</div>

此代码获取所有客户端并将它们显示在 select 字段中,这正是我想要的。但现在我想创建一个新客户端(这是通过 bootstrap 模式完成的)。

$("form#createclient").submit(function (event) {

    var postForm = $('form#createclient').serialize() +             
        '&name=' + $('input[name=name]').val() +                      
        '&email=' + $('input[name=email]').val() +                    
        '&perms=' + $('input[name=rechten]').val();

    $.ajax({
        type: "POST",
        url: "?page=clientmail",
        data: postForm,
        cache: false,
        success: function (result) {
            alert('Nieuwe klant aangemaakt');
            $('.demclients').load('?page=uploadoverview' +  ' .demclients');
        }
    });
    event.preventDefault();

});

所以提交函数从输入中获取所有信息并转到页面 clientmail 以使用此信息创建一个新客户端,之后我将信息更新为:

`$('.demclients').load('?page=uploadoverview' +  ' .demclients');`.

在 header 中调用 select 函数是这样的:

$(document).ready(function() {
    $("#allclients").select2();
});

这段代码只运行一次。我想更新 select,同时仍然保留 select2() 函数的下拉菜单。我尝试了多种更新方法,例如:

但我无法在保持 select2() 函数的下拉菜单的同时更新 select 字段。

使用加载方法的成功回调,因为 select2 只应在加载完成且页面中有新 html 可用时调用

success: function (result) {
            alert('Nieuwe klant aangemaakt');
            $('.demclients').load('?page=uploadoverview' +  ' .demclients', function(){
                 //success load event
                 $("#allclients").select2();
            });
        }