下面是包装在 jQuery 自动完成source
函数中的 Ajax 调用。检查 Fiddler 和 Chrome 的网络控制台中的返回值,我可以看到数据正在以正确的格式返回到视图中。
但是,不会出现用户开始键入时出现的正常项目列表。您可以根据需要尽可能快/慢地输入,并且不会出现任何内容。
我在控制器方法(这是一个 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)
意志不会。
json
这是从 Chrome 的调试控制台返回的副本
这是控制器方法,它以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);