看起来很简单吧?然而,我仍然以某种方式浪费了半天时间而没有任何工作。
例如:以下作品绝对正常
public ActionResult FindStuff(string q)
{
return Content("test");
}
$('#MyTextBox').autocomplete("MyController/FindStuff", {
parse: function(data) {
alert('parsing');
}
});
如果我将其更改为以下内容,则绝对不会发生任何事情。
public JsonResult FindStuff(string q)
{
return Json(new { name = "test" });
}
$('#MyTextBox').autocomplete("MyController/FindStuff", {
dataType: 'json', // I've also tried with this line commented out
parse: function(data) {
alert('parsing');
}
});
所以看起来parse
调用永远不会被命中,即我假设数据负载以某种方式爆炸或者认为没有数据。有任何想法吗?感谢。
P.S。这是Jorn Zaefferer插件here。
答案 0 :(得分:3)
确保您返回一个数组并允许GET请求(如果您使用的是ASP.NET MVC 2.0):
public ActionResult FindStuff(string q)
{
return Json(new[] { new { name = "test" } }, JsonRequestBehavior.AllowGet);
}
然后按照示例:
$('#MyTextBox').autocomplete("MyController/FindStuff", {
dataType: 'json',
parse: function (data) {
var rows = new Array();
for (var i = 0; i < data.length; i++) {
rows[i] = { data: data[i], value: data[i].name };
}
return rows;
},
formatItem: function (row, i, n) {
return row.name;
}
});
很好地工作。
备注:FireBug可以帮助您快速诊断问题,因为它可以准确地向您显示正在发送的AJAX请求以及它们成功或失败的原因。