【发布时间】:2018-05-08 20:25:11
【问题描述】:
我正在尝试使用来自 Active Directory 的搜索结果填充可搜索的 Select2 表单控件。
这是我的 select2 函数:
$("#networkUserSelect").select2({
ajax: {
url: '/Account/ADStartsWith',
dataType: 'json',
delay: 250,
processResults: function (data, params) {
return {
results: $.map(data, function (item)
/**http://api.jquery.com/jquery.map/ **/ {
var name;
var id;
if (typeof (item.displayname) !== "undefined") {
name = (item.displayname["0"].replace(" ", " "));
id = (item.samaccountname["0"] + "@@email.com");
return {
text: name,
slug: name,
id: id
}
}
else {
console.log("display name undefined.");
}
})
};
},
escapeMarkup: function (markup) { return markup; },
minimumInputLength: 1
});
url 指向一个 C# WebMethod,它将 Active Directory 数据作为 JsonResult 返回。
这是邮递员的JsonResult 格式:
"results": [
{
"id": 1,
"text": "XXX",
"displayName": "XXX",
"SAMAccountName": "XXX",
"givenName": "XXX",
"sn": "XXX",
"company": "XXX"
},
{
"id": 2,
"text": "YYY",
"displayName": "YYY",
"SAMAccountName": "YYY",
"givenName": "YYY",
"sn": "YYY",
"company": "YYY"
}
]
JSON 成功发送回 AJAX。 processResults 参数包含预期的值。
在$.map 部分的某个时间点,它使结果无效并且它们变为“未定义”,我收到错误Cannot read property 'results' of undefined。
根据Select2 documentation,我的 JSON 格式正确。
我不确定我错过了什么。
【问题讨论】:
-
item.displayname是否未定义? -
我不确定。我无法在该返回块中执行断点或 console.log 命令。就好像该代码根本没有被命中一样。
-
你试过我下面提到的解决方案了吗?
-
代码似乎没有问题(在@RitwickDey 更正后)您提供的数据,因此您未在此处共享的数据发生了问题。您需要获取问题的堆栈跟踪,并且它可能是您的代码中未处理的边缘情况,导致实际数据出现问题
标签: c# jquery json ajax jquery-select2