在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);
答案 0 :(得分:1)
$ .map函数需要一个数组/对象枚举,作为第一个参数。 ref jQuery.map。
尝试更改
$.map(function (value, key) {
到
$.map(data, function (value, key) {
问候。
答案 1 :(得分:0)
jQuery文档:http://api.jquery.com/jQuery.map/表示$.map
函数需要两个参数;第一个是数组。我认为您需要使用$.each
方法。
我也相信在这种情况下,response
是一个回调函数,您应该使用AJAX中的数据作为参数调用,如response(data)
中所示。
在这里拍摄时,我认为你的成功处理程序应该是这样的:
success: function (data) {
var x, array = [];
for(x in data) {
array.push({
label: data[x].value,
value: data[x].key
};
}
response(data);
}