javascript - Select2 : Uncaught TypeError: options. 结果不是函数

标签 javascript jquery jquery-select2

我正在尝试使用 Select2 jquery 插件进行 AJAX 调用。查询似乎有效,但在 options 对象上调用 .results() 时出现问题:

未捕获的类型错误:options.results 不是函数

这是我的 HTML:

<input class="form-control" type="number" value="2125" name="topic_relation[source_topic_id]" id="topic_relation_source_topic_id" />

这是我的 JS:

$(document).ready(function() {
  $('#topic_relation_source_topic_id').select2({
    minimumInputLength: 3,
    ajax: {
      url: "<%= grab_topics_path %>",
      dataType: 'json',
      delay: 250,
      data: function (term, page) {
        return {
          q: term, //search term
          page_limit: 30, // page size
          page: page, // page number
        };
      },
      processResults: function (data, page) {
        var more = (page * 30) < data.total;
        return {results: data.topics, more: more};
      }
    },
    formatResult: topicFormatResult,
    formatSelection: formatRepoSelection,
    escapeMarkup: function (m) { return m; }
  });
  function topicFormatResult(topic) {
    return topic.name
  }
  function formatRepoSelection(topic) {
    return '<option value="'+ topic.id +'">' + topic.name + '</option>'
  }
});

这是返回的 JSON:

{"total":2, "topics":[{"id":305,"name":"Educational Assessment, Testing, And Measurement"},{"id":3080,"name":"Inspectors, Testers, Sorters, Samplers, And Weighers"}]}

这是失败的代码:

function ajax(options) {
    var timeout, // current scheduled but not yet executed request
        handler = null,
        quietMillis = options.quietMillis || 100,
        ajaxUrl = options.url,
        self = this;

    return function (query) {
        window.clearTimeout(timeout);
        timeout = window.setTimeout(function () {
            var data = options.data, // ajax data function
                url = ajaxUrl, // ajax url string or function
                transport = options.transport || $.fn.select2.ajaxDefaults.transport,
                // deprecated - to be removed in 4.0  - use params instead
                deprecated = {
                    type: options.type || 'GET', // set type of request (GET or POST)
                    cache: options.cache || false,
                    jsonpCallback: options.jsonpCallback||undefined,
                    dataType: options.dataType||"json"
                },
                params = $.extend({}, $.fn.select2.ajaxDefaults.params, deprecated);

            data = data ? data.call(self, query.term, query.page, query.context) : null;
            url = (typeof url === 'function') ? url.call(self, query.term, query.page, query.context) : url;

            if (handler && typeof handler.abort === "function") { handler.abort(); }

            if (options.params) {
                if ($.isFunction(options.params)) {
                    $.extend(params, options.params.call(self));
                } else {
                    $.extend(params, options.params);
                }
            }

            $.extend(params, {
                url: url,
                dataType: options.dataType,
                data: data,
                success: function (data) {
                    ========> var results = options.results(data, query.page, query); <==========
                    query.callback(results);
                },
                error: function(jqXHR, textStatus, errorThrown){
                    var results = {
                        hasError: true,
                        jqXHR: jqXHR,
                        textStatus: textStatus,
                        errorThrown: errorThrown
                    };

                    query.callback(results);
                }
            });
            handler = transport.call(self, params);
        }, quietMillis);
    };
}

最佳答案

由于插件调用 results(),因此您还应该声明 results: function (data, page) 而不是 processResults: function (data, page) .

关于javascript - Select2 : Uncaught TypeError: options. 结果不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32338181/

相关文章:

C# Web 浏览器控件未正确更新

javascript - 按类名的一部分计算 div

javascript - jQuery 从数组中的数组中获取特定元素

ajax - 替换 Mvc 部分 View 后的 select2 jquery 不再起作用

jquery - 重置 select2 值并显示占位符

java - 如何使用生成器修改 CssResource 的 css 文件?

javascript - 无法在物理 iOS 设备 (9.3) 上启动 react-native

jquery - 重用 jQuery UI CSS 并排创建小部件框

javascript - Select2 多选默认选择不起作用

javascript - 用户登录时在顶部显示用户名