我在使用 jQuery 和 AJAX 在 MVC4 razor 中获取自动完成搜索表单时遇到问题。
我的 HTML 表单
@using (Html.BeginForm())
{
@Html.TextBox("FriensList")
<input type="submit" value="Go" />
}
我的 JS 脚本
$(document).ready(function () {
$("#FriensList").autocomplete({
source: function(request,response) {
$.ajax({
url: "/User/FriendList",
type: "POST",
dataType: "json",
data: { term: request.term },
success: function (data) {
response($.map(data, function (item) {
return { label: item.label };
}))
}
})
},
minLength: 1,
delay: 1000
});
})
和我的控制器
public ActionResult FriendList(string term)
{
using (var db = new dbContext())
{
var result = db.UserProfiles
.Where(r => r.FirstName.Contains(term))
.Take(10)
.Select(r => new {label = r.FirstName});
return Json(result, JsonRequestBehavior.AllowGet);
}
}
调试代码,可以看到我在搜索框中输入一个字母就进入了action,从数据库中返回了正确的数据,但是当ajax收到响应时,好像报了500错误。
我已确保在 js 捆绑之后加载我的脚本,并按照之前提出的类似问题中的建议添加了 minLength 和 Delay 参数。
谢谢你的帮助。
编辑 1
我将控制器更改为
public ActionResult FriendList(string term)
{
using (var db = new dbContext())
{
var result = db.UserProfiles
.Where(r => r.FirstName.Contains(term))
.Take(10)
.Select(r => new {label = r.FirstName});
var ser = new JavaScriptSerializer();
var tests = ser.Serialize(result);
return Json(tests, JsonRequestBehavior.AllowGet);
}
}
现在,当我搜索时,我会在搜索框下看到一堆 li 标签。它不打印任何文本,但似乎在重复某些不是结果的内容
编辑 2
我将返回更改为
return Json(tests, "Label", JsonRequestBehavior.AllowGet);
和下面的ajax
return { label: item};
现在它在单独的行中打印出每个单独的字符,包括 json 括号