【问题标题】:jQuery autocomplete not displaying data returned from Ajax calljQuery 自动完成不显示从 Ajax 调用返回的数据
【发布时间】: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
    });
});

编辑

我在代码中添加了一对alertsalert(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


【解决方案1】:

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

尝试改变

$.map(function (value, key) {

$.map(data, function (value, key) {

问候。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-11-29
      • 1970-01-01
      • 2018-01-15
      • 1970-01-01
      • 2019-05-16
      • 2016-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多