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

时间:2013-04-25 19:44:19

标签: ajax asp.net-mvc asp.net-mvc-3 jquery

在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
    });
});

编辑

我在代码中添加了几个alertsalert(data)会触发,但alert(value)不会触发。

以下是Chrome调试控制台中返回的json的副本

enter image description here

这是控制器方法,它以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);

2 个答案:

答案 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);
             }