【发布时间】:2013-04-25 19:44:18
【问题描述】:
在包裹在 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) 不会。
这是从 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吗?
-
你是指返回值还是在控制器中设置的位置?
-
我的意思是返回 json..
-
刚刚在帖子中添加了屏幕截图。
-
服务器(数据)的响应是一个数组吗? $.map 函数也期望数组作为第一个参数来进行投影。
标签: ajax asp.net-mvc asp.net-mvc-3 jquery