这是我的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调用加载并显示用户的本地联系人列表。用户可以看到,很容易选择经常邀请他们参加mtg的人。
问题:如果他们希望用户不在联系人中,则会看到“找不到匹配项”消息。
问题:然后Select2组件可以进行ajax调用以搜索更大的目录(在另一个端点)吗?
我的猜测是它不能,我将必须添加第二个Select2组件才能执行此操作。
有人知道答案吗?
感谢您提供任何有用的提示!
最佳答案
为什么还要打个第二个ajax电话呢?
/transporter/app/roster/getAll
如果返回“找不到用户”,则可以
不要返回“找不到用户”,而是进行更复杂的搜索
立即“像你说的那样第二个数据库”,实际上返回了一些东西
如果您确实想要第二个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/