2010-03-18 34 views
5

Hiện tại, tôi có phiên bản này của kiểm soát tự động hoàn tất khi làm việc với XML từ trình xử lý .ashx. Xml trông như thế này:jQuery AutoComplete (jQuery UI 1.8rc3) với dịch vụ web ASP.NET

<?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> 

Mã autocomplete trông như thế này:

$('.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; 
     } 

    }); 

Vì những lý do khác nhau, tôi thà được gọi một dịch vụ web ASP.NET, nhưng tôi không thể làm cho nó hoạt động. Để thay đổi theo với dịch vụ (Tôi đang làm một dịch vụ địa phương để giữ cho nó đơn giản), sự bắt đầu của mã autocomplete là:

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

Mã này là trên một trang ở thư mục gốc của trang web và GeneralLookup .asmx nằm trong thư mục con có tên là Dịch vụ. Nhưng điểm dừng trong dịch vụ web không bao giờ bị tấn công và không có danh sách tự động hoàn tất nào được tạo. Trong trường hợp nó làm cho một sự khác biệt, XML mà xuất phát từ asmx là:

<?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> 

Về mặt chức năng tương đương kể từ khi tôi không bao giờ sử dụng tên của nút gốc trong mã lập bản đồ. Tôi đã không nhìn thấy bất cứ điều gì trong tài liệu jQuery về việc gọi một dịch vụ .asmx từ điều khiển này, nhưng một cuộc gọi .ajax là một cuộc gọi .ajax, phải không?

Tôi đã thử nhiều đường dẫn khác nhau tới .asmx (~/Services /) và thậm chí tôi đã chuyển dịch vụ sang cùng một đường dẫn để loại bỏ các vấn đề này. Không may mắn với một trong hai.

Bất kỳ ý tưởng nào?

Trả lời

17

Tôi đã tự động hoàn thành để làm việc với .asmx bằng cách sử dụng JSON. Dưới đây là một ví dụ về những gì tôi đã làm:

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

Web Service:

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

này là hoàn hảo. Giải quyết vấn đề của tôi chính xác. – akabak

+0

Cảm ơn rất nhiều! @Doc Hoffiday –

+0

Cảm ơn bạn !!! Giải quyết vấn đề của tôi. – StarCub

Các vấn đề liên quan