【问题标题】:Display data with jQuery autocomplete with WCF Service?使用 WCF 服务使用 jQuery 自动完成显示数据?
【发布时间】:2015-04-09 09:39:46
【问题描述】:

各位程序员们好,

我有一个包含一些数据的数据库。我创建了一个 WCF 服务,它使用 jQuery Autocomplete 从数据库中获取所有名称。我得到 JSON 的响应,但我想在自动完成中显示它。

这是我的 jQuery 的样子:

$(function () {
    function log(message) {
        $("<div>").text(message).prependTo("#log");
        $("#log").scrollTop(0);
    }
    $("#city").autocomplete({
        source: function (request, response) {
            $.ajax({
                url: "/service.svc/GetData",
                dataType: "jsonp",
                data: {
                    DataName: request.term
                },
                success: function (data) {
                    response(data);
                }
            });
        },
        minLength: 3,
        select: function (event, ui) {
            log(ui.item ?
            "Selected: " + ui.item.label :
            "Nothing selected, input was " + this.value);
        },
        open: function () {
            $(this).removeClass("ui-corner-all").addClass("ui-corner-top");
        },
        close: function () {
            $(this).removeClass("ui-corner-top").addClass("ui-corner-all");
        }
    });
});

我对 WCF 还很陌生,想知道下一步是什么?如何映射数据以便显示?

JSON 数据输出如下所示:

{"GetDataResult":[{"Name":"Fran $","CategoryId":102,"dataId":1,"IndexId":16,"InsertedDate":null,"Manual":false}

【问题讨论】:

  • GetData 提供的 JSON 是什么样的?自动完成希望它采用某种格式
  • 我编辑了第一篇文章。
  • 所以为了清楚起见,您想从数组中的每个结果中显示Name 作为建议吗?
  • 没错,如果我在输入框中输入例如“Kol”,我希望所有带有“Kol”的结果都显示为建议。

标签: c# jquery jquery-ui autocomplete jquery-ui-autocomplete


【解决方案1】:

自动完成小部件要求您提供给response 回调函数的数组采用以下格式之一:

  1. 字符串数组,例如["Hello", "Goodbye"]
  2. 对象数组。每个对象必须至少具有label 属性或value 属性。它也可能具有其他属性。

所以在您的情况下,您可以:

  1. 编辑返回 JSON 的服务器端代码以符合小部件期望的格式,或者
  2. 在将结果传递给response 回调之前修改结果。

我将专注于 #2。执行此操作的规范方法是使用 $.map 将您从服务器返回的数组转换为正确的格式,然后将生成的数组提供给 response 回调。

在您的情况下,可能看起来像这样:

success: function (data) {
    response($.map(data.GetDataResult, function (item) {
        return {
            label: item.Name,
            value: item.dataId
        };
    }));
}

示例:http://jsfiddle.net/yntrp063/

请注意,value 属性的值将在您选择项目后在文本框内使用——这可能不是您想要的。

【讨论】:

  • 我试过了,但还是没有自动完成。我仍然得到 json 响应。
  • @user3410846 那么success 回调触发了吗?
  • 它仍然会触发。所以它仍然会给出回应。但是我必须使用 firebug(Firefox) 来查看输入给出的结果...
  • @user3410846:你试过不使用jsonp吗?我不确定你在这里需要它
  • 哇,老兄,把 'json' 而不是 jsonp 工作了。我不知道为什么大声笑。
猜你喜欢
  • 2018-01-15
  • 1970-01-01
  • 2012-07-16
  • 1970-01-01
  • 2014-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-27
相关资源
最近更新 更多