javascript - 将 1 个数据集加载到选择元素中并过滤搜索另一个端点

标签 javascript jquery jquery-select2

这是我的 select2 组件:

<select
    multiple
    id="e1" 
    placeholder: "Select meeting participants"
    style="width:450px;"></select>

默认情况下,当页面加载时,会进行 ajax 调用来加载用户的联系人。

// Roster list remote call + handler =========================================>
transporter.ajax( "/transporter/app/roster/getAll", {}, 
    function( data )
    {
        var contacts = data.response.rlist.contactList;

        for( var i = 0; i < contacts.length; i++ )
        {
            var obj = new Object();
            obj[ 'id' ] = i;
            obj[ 'displayName' ] = contacts[i].displayName;
            obj[ 'contactName' ] = contacts[i].contactName;
            obj[ 'contactType' ] = contacts[i].contactType;
            obj[ 'avatar' ] = contacts[i].avatar;
            obj[ 'status' ] = contacts[i].status;

            roster.push( obj );
        }

        var ddl = document.getElementById( 'e1' );

        for ( var j = 0; j < roster.length; j++ ) 
        {
            var o = document.createElement( 'option' );
            o.value = roster[ j ].contactName;
            o.text = roster[ j ].displayName;
            ddl.appendChild( o );                
        }
    });

这就是我想要发生的事情:初始 ajax 调用加载并显示用户的本地联系人列表。用户很高兴看到并且可以轻松选择他们经常邀请参加 mtgs 的人。

问题:如果他们想要的用户不在他们的联系人中,他们会看到“未找到匹配项”消息。

问题:Select2 组件可以进行 ajax 调用来搜索更大的目录(在不同的端点)吗?

我的猜测是它不能,我必须添加第二个 Select2 组件才能做到这一点。

有人知道答案吗?

感谢您提供任何有用的提示!

最佳答案

为什么要费心进行第二次 ajax 调用呢?

/transporter/app/roster/getAll

如果它返回“未找到用户”..您可以

  1. 不要返回“未找到用户”,而是进行更复杂的搜索 立即“像你所说的第二个数据库”,并实际返回一些东西
  2. 如果你确实想要第二个 ajax 调用,只需执行类似的操作

    transporter.ajax( "/transporter/app/roster/getAll", {}, callBack);
    
    function callBack( data ) {
        var contacts = data.response.rlist.contactList;
    
        if (contacts == null || contacts.length == 0) {
            // callback fillList, don't call this in an endless loop
            transporter.ajax( "/transporter/app/roster/searchAll", {}, fillList);
    
            return;
        }
    
        fillList( data );
    }
    
    function fillList( data ) {
        var contacts = data.response.rlist.contactList;
    
        for( var i = 0; i < contacts.length; i++ ) {
            var obj = new Object();
            obj[ 'id' ] = i;
            obj[ 'displayName' ] = contacts[i].displayName;
            obj[ 'contactName' ] = contacts[i].contactName;
            obj[ 'contactType' ] = contacts[i].contactType;
            obj[ 'avatar' ] = contacts[i].avatar;
            obj[ 'status' ] = contacts[i].status;
    
            roster.push( obj );
        }
    
        var ddl = document.getElementById( 'e1' );
    
        for ( var j = 0; j < roster.length; j++ ) {
            var o = document.createElement( 'option' );
            o.value = roster[ j ].contactName;
            o.text = roster[ j ].displayName;
            ddl.appendChild( o );
        }
    }
    

我认为你自己实际上回答了这个问题

关于javascript - 将 1 个数据集加载到选择元素中并过滤搜索另一个端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17622044/

相关文章:

javascript - 如何在不破坏菜单的情况下更改价格大小?

javascript - 使用 javascript/knockout 设置父级父级 css

ruby-on-rails-3 - 让 select2 与事件管理员一起工作

javascript - Angular UI select2 数组与对象可能吗?

Javascript 英国邮政编码验证

javascript - react : Passing an object to state

javascript - jQuery 获取选项卡的属性

jquery - 新按钮的调用功能

php - Laravel - 将 Select2 默认设置为 NULL 而不是第一个选项

javascript - 在 JavaScript 中快速重绘 unicode 符号数组