【问题标题】:Select2 and initSelection callbackSelect2 和 initSelection 回调
【发布时间】:2013-09-25 02:18:01
【问题描述】:

在页面加载时,我正在尝试使用 initSelection 来选择 ID 60(输入字段的指定值)。我似乎无法让它正常工作。

PHP 脚本运行良好并返回正确的值,但如何让 JS 正确执行回调?

JavaScript:

$(document).ready(function() {
    $('#editAlbumArtistId').select2({
            placeholder: 'Search names',
            ajax: {
                url: "/jQueryScripts/jQuerySelectListArtists.php",
                dataType: 'json',
                quietMillis: 100,
                data: function (term, page) {
                    return {
                        term: term, //search term
                        page_limit: 10 // page size
                    };
                },
                results: function (data, page) {
                    return {results: data.results};
                }

            },
            initSelection: function(element, callback) {

            var id = $(element).val();
            if(id !== "") {
                $.ajax("/jQueryScripts/jQuerySelectListArtists.php", {
                    data: {id: id},
                    dataType: "json"
                }).done(function(data) {
                    callback(data);
                });
            }
        }
    });
});

HTML:

<p>
    <input type='hidden' value="60" data-init-text='Search names' name='editAlbumArtistId' id='editAlbumArtistId' style="width:180px;"/>
</p>

每次刷新页面时,我都会看到 PHP 脚本被执行并返回正确的 ID 和文本。但是,该字段没有更新,我已经认真尝试了我能想到的一切。

我正在使用 Select2 3.4.3。

任何帮助将不胜感激。

【问题讨论】:

  • 您是否尝试过检查开发人员工具中发生的情况?查看您的 ajax 调用是否返回 200,并且 json 中有一个 results 的键。
  • 您应该使用 ajax 设置(成功、错误、完成)。 api.jquery.com/jQuery.ajax/#jQuery-ajax-settings
  • 你为什么把jsonp作为数据类型?
  • 感谢到目前为止的 cmets!我已将数据类型从 jsonp 更改为 json(不知道有什么区别,抱歉)。我现在在加载时得到“未定义”。我试过使用 ajax 成功,结果相同。 @Wil ajax 返回 200。ajax 确实在返回结果。

标签: jquery jquery-select2


【解决方案1】:

终于解决了!我认为select2 不需要数组,因为它是单个值,所以我选择了 data.results 数组的第一个元素。

callback(data.results[0]);

如果你设置了multiple:true,只接受整个结果数组;

callback(data.results);

【讨论】:

  • 你怎么知道的?我很生气,因为这个问题和工作 3 天!终于找到你真棒的答案!!!
  • @mad-marvin 如果您/某人提供了对象结构会更好。因为 datadata.results 甚至 data.results[0] 包含的内容并不总是很明显。我仍在查看select2 代码,如果我发现了什么,请在此处更新。
  • 刚刚更新了答案本身。我希望它有所帮助,不要弄乱实际的答案。
  • 这取决于您的远程结果。如果你的结果看起来像 [{...}, {...}],那么 data[0] 就可以了。 Mad Marvins 结果可能看起来像这样: {"results": [{...}, {...}]}
【解决方案2】:

你也可以用它来减少代码:

    initSelection: function(element, callback) {
        return $.getJSON("/jQueryScripts/jQuerySelectListArtists.php?id=" + element.val(), null, function(data) {
            return callback(data[0]);
        });
    }

我在 Select2 wiki 中看到了这个示例,但我不得不像你一样处理回调(数据)与回调(数据 [0])。

【讨论】:

    猜你喜欢
    • 2017-01-04
    • 2013-04-09
    • 2020-07-07
    • 1970-01-01
    • 2013-08-17
    • 2013-02-16
    • 2015-05-12
    • 1970-01-01
    • 2015-01-13
    相关资源
    最近更新 更多