jQuery自动完成不显示从Ajax调用返回的数据

jQuery自动完成不显示从Ajax调用返回的数据,ajax,asp.net-mvc,asp.net-mvc-3,jquery,Ajax,Asp.net Mvc,Asp.net Mvc 3,Jquery,下面是包装在jQuery自动完成源代码函数中的Ajax调用。在Fiddler和Chrome的网络控制台中检查返回值,我可以看到数据以正确的格式返回到视图中 但是,用户开始键入时出现的正常项目列表不会显示。你可以输入快/慢,只要你想输入的时间少/长,什么都不会出现 我在controller方法(这是一个ASP MVC站点)中设置了一个断点,以确保程序的一部分正常运行,并且每次都会触发 我对jQuery只有几周的新经验,因此非常感谢您的帮助。谢谢 $(function () { $('#DR

下面是包装在jQuery自动完成
源代码
函数中的Ajax调用。在Fiddler和Chrome的网络控制台中检查返回值,我可以看到数据以正确的格式返回到视图中

但是,用户开始键入时出现的正常项目列表不会显示。你可以输入快/慢,只要你想输入的时间少/长,什么都不会出现

我在controller方法(这是一个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
    });
});
编辑

我在代码中添加了几个
警报。
警报(数据)
将启动,但
警报(值)
不会启动

这是从Chrome的调试控制台返回的
json
的副本

这里是控制器方法,它以
字典
对象的形式返回键/值对

            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);
XmlNamespaceManager nsmgr=新的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");
字典公司=新字典();
foreach(父节点中的XmlNode子节点)
{
if(!String.IsNullOrWhiteSpace(childNode[“content”].InnerText))
{
尝试
{
字符串名称=childNode[“title”]。InnerText;
string id=childNode[“content”].InnerText.Substring(0,6);
公司。添加(id、名称);
}
捕获(例外情况除外)
{
}
}
}
返回Json(companys,JsonRequestBehavior.AllowGet);
}
捕获(例外情况除外)
{
结果=ex.InnerException.ToString();
}
返回Json(结果,JsonRequestBehavior.AllowGet);
jQuery文档:说明
$.map
函数需要两个参数;第一个是数组。我认为您需要使用
$。每个
方法

我还相信在这种情况下,
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);
             }

$.map函数需要枚举一个数组/对象作为第一个参数。参考号

试着改变

$.map(function (value, key) {


问候。

你能显示你的json吗?你是指返回的值还是在控制器中设置的位置?我是指返回的json..刚刚在帖子中添加了一个屏幕截图。你的服务器(数据)响应是数组吗?另外,$.map函数期望数组作为进行投影的第一个参数。
$.map(data, function (value, key) {