我想用数据库中的数据填充autocomplete
。
所以我在c#中编写了一个方法来从db:
public string[] GetNames()
{
var names = unitOfWork.deviceRepository.Get().Select(w=>w.Name);
return names.ToArray();
}
这很好用。所有需要的数据都是名称。
现在我正在使用Ajax将这些数据提供给客户端:
$(function () {
var availableTags;
$.ajax({
url: "/DeviceUsage/GetNames",
type: "GET",
error: function (data) {
alert("wystąpił nieokreślony błąd " + data);
},
success: function (data) {
console.log(data);
availableTags = data;
}
})
$("#deviceName").autocomplete({
source: availableTags
});
});
您可以看到我离开dataType
进行智能猜测。
但是console.log成功地在控制台中写入System.String[]
而不是来自GetNames
的数据。
任何人都可以建议我如何修改我的代码以使自动完成工作?
答案 0 :(得分:3)
dataType
不适用于C#或MVC或服务器端,这是告诉jQuery您正在使用json响应并且jQuery应该解析它。由于您没有提供它,jQuery不会解析它,因此数据只是一个字符串。如果你想要json,那么提供它或使用JSON.parse
来解析你的数据字符串。
要么 -
$.ajax({
url: "/DeviceUsage/GetNames",
type: "GET",
dataType: "json",
error: function (data) {
alert("wystąpił nieokreślony błąd " + data);
},
success: function (data) {
console.log(data);
availableTags = data;
}
})
或 -
$.ajax({
url: "/DeviceUsage/GetNames",
type: "GET",
error: function (data) {
alert("wystąpił nieokreślony błąd " + data);
},
success: function (data) {
var jsonData = JSON.parse(data);
console.log(jsonData);
availableTags = jsonData;
}
})
而且,在分配之前,你不是在等待ajax完成 -
$("#deviceName").autocomplete({
source: availableTags
});
你应该等待ajax完成,所以把这个电话转到这样的成功 -
success: function (data) {
//do proper parsing as mentioned earlier
availableTags = jsonData;
$("#deviceName").autocomplete({
source: availableTags
});
}
因为在通话时availableTags
中没有任何内容。
答案 1 :(得分:1)
如果您只是希望以逗号分隔的字符串作为返回值,则可以更改GetNames
函数以返回string
并使用String.Join
函数连接数组。
return String.Join(", ", unitOfWork.deviceRepository.Get().Select(w=>w.Name).ToArray());
但我个人建议使用某种类型的json
值响应并返回一个字符串数组作为json string
(由JavaScript轻松解析)。
类似的东西(使用newtonsoft json.net,未测试以下示例):
return JsonConvert.SerializeObject(unitOfWork.deviceRepository.Get().Select(w=>w.Name).ToArray());