JQuery UI автозаполнение нуждается в дополнительной функции - PullRequest
0 голосов
/ 20 декабря 2010

У меня такой код автозаполнения:

$("input#PickupSpot").autocomplete({
  source: function(request, response){
     $.ajax({
        url: "AjaxSearch.aspx",
        dataType: "jsonp",
        data: {
           a: "getspots",
           c: "updateSpotList",
           q: request.term
        },
        success: function(){
           alert("Success");
        },
        error: function (xhr, ajaxOptions, thrownError){
                alert(xhr.status);
                alert(thrownError);
        }

     });
  }

});

Когда я пытаюсь получить данные, Firebug показывает ошибку: «updateSpotList не определен» . Мне нужно создать функцию с именем updateSpotList , чтобы получить ответ от сервера. И предупреждение об успехе никогда не вызывается.

Зачем мне нужна эта функция? Может быть, есть что-то определенное в aspx? Это:

string response = "";

 string callback = Request.QueryString["c"];
 string action = Request.QueryString["a"]; 
 string query = Request.QueryString["q"];

  //Ensure action parameter is set
  if(action != null && action.Equals("getspots")){
        //Ensure query parameter is set
        if (query != null && query.Length > 0){
            SpotListRequest request = new SpotListRequest
            {
                FreeText = query,
                Language = "sv-SE"
            };
            IEnumerable<Spot> spots = DataBridge.GetSpotList(null, null, query).OrderBy(i => i.FullName);

            JavaScriptSerializer js = new JavaScriptSerializer();

            string json = js.Serialize(spots.ToArray());

            //Ensure callback parameter is set
            if (callback != null && callback.Length > 0)
            {
                response = String.Format("{0}('{1}')", callback, json);
            }
        }
    }

1 Ответ

1 голос
/ 20 декабря 2010

Вы можете указать URL в качестве параметра источника вместо параметра данных.

http://jqueryui.com/demos/autocomplete/#option-source

Плагин отправит запрос на ваш сервер, и вы должны вернуть JSONмассив выглядит следующим образом:

[{label: "Name"}, {label: "Name 2"}]

Измените свой код JavaScript на этот:

$("input#PickupSpot").autocomplete({
  source: "AjaxSearch.aspx?a=getspots&c=updateSpotList"
});

Плагин автозаполнения добавит параметр с именем term к исходному URL с текущим значением входного элемента, поэтому будет сделан запрос: «AjaxSearch.aspx? A = getspots & c = updateSpotList & term = test», если вы написали test вэлемент ввода.

На сервере вы хотите изменить q на термин.

...