Автозаполнение jQuery (jQuery UI 1.8rc3) с веб-сервисом ASP.NET - PullRequest
5 голосов
/ 18 марта 2010

В настоящее время у меня есть эта версия элемента управления автозаполнения, работающая при возврате XML из обработчика .ashx. 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, но не могу заставить его работать. Чтобы перейти на службу (я делаю локальную службу, чтобы сделать ее проще), начало кода автозаполнения:

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

Этот код находится на странице в корне сайта, а файл GeneralLookup.asmx находится в подпапке с именем Services. Но точка останова в веб-сервисе никогда не попадает в цель, и список автозаполнения не создается. В случае, если это имеет значение, XML, который приходит от asmx:

<?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 /), и я даже переместил службу в один и тот же путь, чтобы устранить эти проблемы. Не повезло ни с одним.

Есть идеи?

1 Ответ

18 голосов
/ 06 апреля 2010

Я получил автозаполнение для работы с .asmx с помощью JSON.Вот пример того, что я сделал:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...