4

私はjQuery Automcompleteを機能させようとしていますが、私が望むようには機能しません:P これは私のコードです:

JavaScript:

        $("#CustomerID").autocomplete({
            source: function(request, response) {
                $.ajax({
                    type: "POST",
                    url: "/customer/search",
                    dataType: "json",
                    data: {
                        term: request.term
                    },
                    error: function(xhr, textStatus, errorThrown) {
                        alert('Error: ' + xhr.responseText);
                    },
                    success: function(data) {
                        response($.map(data, function(c) {
                            return {
                                label: c.Company,
                                value: c.ID
                            }
                        }));
                    }
                });
            },
            minLength: 2,
            select: function(event, ui) {
                alert('Select');
            }
        });

ASP MVC:

    [AcceptVerbs(HttpVerbs.Post)]
    public JsonResult Search(string term)
    {
        if (term == null)
            term = "";

        List<JSON_Customer> customers = repCustomer.FindCustomers(term).ToList();
        return Json(customers);
    }

    public class JSON_Customer
    {
        public int ID { get; set; }
        public string Company { get; set; }
    }

    public IQueryable<JSON_Customer> FindCustomers(string searchText)
    {
        return from c in _db.Customers
               where c.Company.Contains(searchText)
               orderby c.Company
               select new JSON_Customer
               {
                   ID = c.ID,
                   Company = c.Company
               };
    }

からリクエストを受け取り、$.ajax検索語に従って正しい顧客リストを返します。そして、successメソッドが呼び出されます。data価値があることはわかり[object Object]ますが、次に何をすればよいでしょうか? リストに顧客がドロップダウンしません。http://jqueryui.com/demos/autocomplete/#remote-jsonpresponse($.map...のコードを使用していますが、うまくいきません。

理由を知っている人はいますか?

4

1 に答える 1

1

私は最初の AJAX リクエストの前にこれを使用しています - きっと役に立つでしょう。標準項目を定義し、Microsoft が最上位属性として配置する "d" 属性を処理します。

  $.ajaxSetup({
     type: "POST",
     contentType: "application/json; charset=utf-8",
     data: "{}",
     dataFilter: function(data) {
        var msg;

        if (typeof (JSON) !== 'undefined' && typeof (JSON.parse) === 'function')
           msg = JSON.parse(data);
        else
           msg = eval('(' + data + ')');

        if (msg.hasOwnProperty('d'))
           return msg.d;
        else
           return msg;
     }
  });
于 2010-09-21T20:28:09.450 に答える