我正在尝试使用VB .Net4创建一个自动完成文本框。它有一个json后端,它只返回一个名字和姓氏,如下所示:
{"d":"[{\"firstN\":\"john\",\"lastN\":\"doe\"},{\"firstN\":\"another \",\"lastN\":\"dude\"},{\"firstN\":\"dsaf\",\"lastN\":\"asdfasdf\"}]"}
我的JQuery似乎是一个相当标准的代码:
$("#MainContent_autocomplete").autocomplete({
source: function (request, response) {
$.ajax({
url: "/PatientLookup.asmx/LookupPatient",
dataType: "json",
type: "POST",
data: "{ 'key': '" + request.term + "' }",
contentType: "application/json; charset=utf-8",
processData: true,
success: function (data) {
response($.map(data.d, function (item) {
return {
label: item.firstN,
value: item.firstN
}
}));
}
});
},
minLength: 2
});
问题出现在成功功能中。当它进入map函数时,它根本不会让我读取firstN和lastN数据。
答案 0 :(得分:1)
根据引用的数组判断,看起来您正在返回一个字符串值,您使用JavaScriptSerializer或DataContractJsonSerializer手动JSON序列化,如:
public string LookupPatient(string key) {
// Something that returns a string of JSON here.
}
是吗?
如果是这样,您应该让.NET为您处理序列化。像这样:
public class Name {
public string firstN { get; set; }
public string lastN { get; set; }
}
public List<Name> LookupPatient(string key) {
List<Name> result = new List<Name>();
result.Add(new Name() { firstN = "Dave", lastN = "Ward" });
result.Add(new Name() { firstN = "John", lastN = "Doe" });
// JSON serialization happens automatically here.
return result;
}
如果您已经有了适当的视图模型或DTO类,显然您可以重用它,而不是专门为这个方法创建Name
类。
答案 1 :(得分:0)
您的JSON无效:d
的值不得引用,并且您要转义引号:
{
"d": [
{
"firstN": "john"
, "lastN": "doe"
}
, {
"firstN": "another"
, "lastN" : "dude"
}
, {
"firstN": "dsaf",
"lastN": "asdfasdf"
}
]
}