【发布时间】:2015-12-22 12:46:02
【问题描述】:
我正在使用 asp.net webservice 在 jQuery UI 自动完成插件中使用它,这是我得到的数据。
{"d":[
{
"__type":"WebS.Model.SearchModel",
"MainCommodityId":1,
"MainCommodityName":"Pulses",
"SubcommodityId":3,
"SubCommodityName":"Urid Dal",
"BrandId":3,
"BrandName":"President"
},
{
"__type":"WebS.Model.SearchModel",
"MainCommodityId":1,
"MainCommodityName":"Pulses",
"SubcommodityId":1,
"SubCommodityName":"Red Gram",
"BrandId":4,
"BrandName":"President"
}
]
}
这是我正在使用的脚本:
$(document).ready(function () {
$(".input-search").autocomplete({
source: function (request, response) {
$.ajax({
url: '/WebServices/GetAllBrandNames.asmx/getAllBrands',
data: "{ 'data': '" + request.term + "'}",
dataType: "json",
contentType: "application/json; charset=utf-8",
type: "POST",
contentType: "application/json; charset=utf-8",
success: function (data) {
response($.map(data.d, function (item) {
return {
value: item.BrandName,
label: item.SubCommodityName
}
}))
},
error: function (response) {
alert('error');
},
failure: function (response) {
alert('faii');
}
});
},
select: function (e, i) {
console.log(i.MainCommodityId);
console.log(i.SubcommodityId);
console.log(i.BrandId);
},
minLength: 1
}).autocomplete("instance")._renderItem = function (ul, item) {
return $("<li></li>")
.data("item.autocomplete", item)
.append("<a>" + "" + item.BrandName + " in " + item.MainCommodityName + " - " + item.SubCommodityName + "</a>")
.appendTo(ul);
};
});
问题是:
- 当我尝试输入关键字时说:pre 上述输出以 json 格式出现。但是,该列表只返回一个“总统”项目,它应该显示 2 个项目。
- 添加
.autocomplete("instance")._renderItem函数后,列表显示“未定义中的未定义 - 未定义”而不是值。 -
console.logs 在选择项目后也未定义。
如何解决这些问题?
【问题讨论】:
-
你有没有尝试将 var data=JSON.parse(data) 作为 $.ajax 中成功的第一行?
-
是的。我也试过了。
-
如果数据能够编码,那么返回 json 可能会出现问题尝试创建一个全局 json 对象的数组并将 json 对象推入该数组并返回。
-
我可以看到您的测试站点上出现了两个“总统”。只是您的导航栏隐藏了它。关于未定义。您可以尝试在使用
$( ".input-search" ).on( "selectmenuselect", function( event, ui ) {do something..} );附加<li>项目后添加选择事件@ -
所以这是为了防止
focus和select上的默认操作,并使用_renderItem自定义下拉菜单,除此之外我猜一切都是正确的。不错(+1)。
标签: javascript jquery json jquery-ui jquery-ui-autocomplete