【问题标题】:jQuery AutoComplete (jQuery UI 1.8rc3) with ASP.NET web service带有 ASP.NET Web 服务的 jQuery AutoComplete (jQuery UI 1.8rc3)
【发布时间】:2011-01-29 02:15:54
【问题描述】:

目前,当从 .ashx 处理程序返回 XML 时,我可以使用此版本的自动完成控件。 xml 看起来像这样:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?> 
<States>
<State>
  <Code>CA</Code> 
  <Name>California</Name> 
</State>
<State>
  <Code>NC</Code> 
  <Name>North Carolina</Name> 
</State>
<State>
  <Code>SC</Code> 
  <Name>South Carolina</Name> 
</State>

自动完成代码如下所示:

    $('.autocompleteTest').autocomplete(
    {
        source: function(request, response) {
            var list = [];
            $.ajax({
                url: "http://commonservices.qa.kirkland.com/StateLookup.ashx",
                dataType: "xml",
                async: false,
                data: request,
                success: function(xmlResponse) {
                    list = $("State", xmlResponse).map(function() {
                        return {
                            value: $("Code", this).text(),
                            label: $("Name", this).text()
                        };
                    }).get();
                }
            });
            response(list);
        },
        focus: function(event, ui) {
            $('.autocompleteTest').val(ui.item.label);
            return false;
        },
        select: function(event, ui) {
            $('.autocompleteTest').val(ui.item.label);
            $('.autocompleteValue').val(ui.item.value);
            return false;
        }

    });

出于各种原因,我宁愿调用 ASP.NET Web 服务,但我无法让它工作。要切换到服务(为了简单起见,我正在做一个本地服务),自动完成代码的开头是:

    $('.autocompleteTest').autocomplete(
    {
        source: function(request, response) {
            var list = [];
            $.ajax({
                url: "/Services/GeneralLookup.asmx/StateList",
                dataType: "xml",

此代码位于站点根目录的页面上,GeneralLookup.asmx 位于名为 Services 的子文件夹中。但是 Web 服务中的断点永远不会被命中,并且不会生成自动完成列表。万一有所不同,来自 asmx 的 XML 是:

<?xml version="1.0" encoding="utf-8" ?> 
<string xmlns="http://www.kirkland.com/"><State> <Code>CA</Code> <Name>California</Name> </State> <State> <Code>NC</Code> <Name>North Carolina</Name> </State> <State> <Code>SC</Code> <Name>South Carolina</Name> </State></string>

功能等效,因为我从未在映射代码中使用根节点的名称。我在 jQuery 文档中没有看到任何关于从此控件调用 .asmx 服务的内容,但是 .ajax 调用是 .ajax 调用,对吧?

我尝试了各种不同的 .asmx (~/Services/) 路径,我什至将服务移动到同一路径以消除这些问题。也没有运气。

有什么想法吗?

【问题讨论】:

    标签: asp.net web-services jquery-ui autocomplete


    【解决方案1】:

    我通过使用 JSON 获得了与 .asmx 一起使用的自动完成功能。这是我所做的一个示例:

    JavaScript:

    $("#tbNameFilter").autocomplete({
        source: function (request, response) {
            $.ajax({
                url: "/Services/AutocompleteService.asmx/Aoi_Autocomplete",
                data: "{ 'q': '" + request.term + "', 'limit': '10' }",
                dataType: "json",
                type: "POST",
                contentType: "application/json; charset=utf-8",
                dataFilter: function (data) { return data; },
                success: function (data) {
                    response($.map(data.d, function (item) {
                        return {
                            label: item.Name,
                            value: item.Name
                        }
                    }))
                }
            });
        },
        minLength: 1
    });
    

    网络服务:

    [WebMethod]
    public List<FAD_Aoi> Aoi_Autocomplete(String q, int limit)
    

    【讨论】:

    • 这是完美的。正好解决了我的问题。
    猜你喜欢
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    • 2011-01-09
    • 1970-01-01
    相关资源
    最近更新 更多