下面的Ajax调用包装在jQuery自动完成source
函数中。检查Fiddler以及Chrome的网络控制台中的返回值,我可以看到数据正在以正确的格式返回到视图。jQuery自动完成不显示从Ajax调用返回的数据
但是,用户开始键入时出现的正常项目列表不会显示。你可以按照你想要的那样尽可能快/慢地键入,并且不会出现任何内容。
我在控制器方法(这是一个ASP MVC站点)中设置了一个断点,以确保程序的一部分正常运行,并且每次都会触发。
我只是几个星期的新jQuery,所以任何帮助将不胜感激。谢谢!
$(function() {
$('#DRMCompanyId').autocomplete({
source: function (request, response) {
$.ajax({
url: '@Url.Action("compSearch", "AgentTransmission")',
type: 'GET',
dataType: 'json',
data: request,
success: function (data) {
alert(data);
response($.map(function (value, key) {
alert(value);
return {
label: value,
value: key
};
}));
}
});
},
minLength: 1
});
});
编辑
我增加了几个alerts
的代码。 alert(data)
将会启动,但alert(value)
不会。
下面是从Chrome的调试控制台
返回json
的副本,这里是返回一个Dictionary
对象的形式的键/值对的控制器的方法。
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlDoc.NameTable);
nsmgr.AddNamespace("m", "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata");
nsmgr.AddNamespace("d", "http://schemas.microsoft.com/ado/2007/08/dataservices");
Dictionary<string, string> companies = new Dictionary<string, string>();
foreach (XmlNode childNode in parentNode)
{
if (!String.IsNullOrWhiteSpace(childNode["content"].InnerText))
{
try
{
string name = childNode["title"].InnerText;
string id = childNode["content"].InnerText.Substring(0, 6);
companies.Add(id, name);
}
catch (Exception ex)
{
}
}
}
return Json(companies, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
results = ex.InnerException.ToString();
}
return Json(results, JsonRequestBehavior.AllowGet);
你能展示你的json吗? – 2013-04-25 19:47:02
你的意思是返回的值或它在控制器中的设置? – NealR 2013-04-25 19:52:40
我的意思是返回json .. – 2013-04-25 19:54:28