Javascript 如何通过内置的Ajax框架为Select2和10月CMS提供数据源

Javascript 如何通过内置的Ajax框架为Select2和10月CMS提供数据源,javascript,php,ajax,jquery-select2,octobercms,Javascript,Php,Ajax,Jquery Select2,Octobercms,十月CMS提供了一个广泛的AJAX框架,我希望用它来填充Select2框 根据Select2,使用远程数据集的情况如下: $(".js-data-example-ajax").select2({ ajax: { url: "https://api.github.com/search/repositories", dataType: 'json', delay: 250, data: function (params) { return {

十月CMS提供了一个广泛的AJAX框架,我希望用它来填充Select2框

根据Select2,使用远程数据集的情况如下:

$(".js-data-example-ajax").select2({
  ajax: {
    url: "https://api.github.com/search/repositories",
    dataType: 'json',
    delay: 250,
    data: function (params) {
      return {
        q: params.term, // search term
        page: params.page
      };
    },
    processResults: function (data, params) {
      params.page = params.page || 1;
      return {
        results: data.items,
        pagination: {
          more: (params.page * 30) < data.total_count
        }
      };
    },
    cache: true
  },
  escapeMarkup: function (markup) { return markup; },
  minimumInputLength: 1,
  templateResult: formatRepo, 
  templateSelection: formatRepoSelection 
});
下面是我与Select2示例结合使用的示例输出:

[  
   {  
      "id":1,
      "text":"Henry Kissinger"
   },
   {  
      "id":2,
      "text":"Ricardo Montalban"
   }
]
上面的JSON是由我的VisitorForm.php文件生成的:

<?php namespace XXX\VisitorRegistration\Components;

use Cms\Classes\ComponentBase;
use XXX\VisitorRegistration\Models\Visitor;
use October\Rain\Auth\Models\User;

class VisitorForm extends ComponentBase {
    public function componentDetails()
    {
        return [
            'name' => 'Visitor Form',
            'description' => 'Description of the component'
        ];
    }

    // The function that returns the JSON, needs to be made dynamic
    public function onSelect() {
        return json_encode(array(array('id'=>1,'text'=>'Henry Kissinger'), array('id'=>2,'text'=>'Ricardo Montalban')));
    }
}

传递
传输
选项,而不是
url
。以下是一个例子:

$(".js-data-example-ajax").select2({
    ajax: {
        transport: function(params, success, failure) {

            /*
             * This is where the AJAX framework is used
             */
            var $request = $.request('onGetSomething', {
                data: params.data
            })

            $request.done(success)
            $request.fail(failure)

            return $request
        },

        dataType: 'json'
    },
    // ...
});

不久前,我在OctoberCMS论坛上问了一个与此相关的问题。一些人似乎同意这是一个有效的观点/问题,但没有人提出解决方案。谢谢你的评论。真遗憾。让我们看看这里是否有回应。如果我得到一个解决方案,我会把它链接到那边的线程上。谢谢塞缪尔。我会做一个全面的测试,很快会给你回复。嗨,塞缪尔,这很有效。不过,我发现Select2和远程数据源的文档非常缺乏。由于遵循Github上的默认远程数据源示例,我遇到了多个问题。我将尝试编辑我的问题以反映这些困难。这正是我想要的!!谢谢你,塞缪尔
$(".js-data-example-ajax").select2({
    ajax: {
        transport: function(params, success, failure) {

            /*
             * This is where the AJAX framework is used
             */
            var $request = $.request('onGetSomething', {
                data: params.data
            })

            $request.done(success)
            $request.fail(failure)

            return $request
        },

        dataType: 'json'
    },
    // ...
});