2011-01-27 4 views
0

У меня есть следующий скрипт, который, похоже, не работает. На странице aspx возвращается json, подобный json в скрипте ниже, который был прокомментирован. Если я прикреплю этот json непосредственно к источнику как массив, он отлично работает.автозаполнение с asp.net генерируется json

Но как только я попытаюсь использовать сценарий ниже, я не получаю сообщений об ошибках или что-то еще, ничего не происходит, когда я ввожу в поле автозаполнения.

$(document).ready(function(){ 
    $('#button').click(function() { 
     alert($("#txtAllowSearchID").val()); 
    }); 

    //var $local_source = [ {id:0,value:"c++"}, {id:1,value:"java"}, {id:2,value:"php"}, {id:3,value:"coldfusion"}, {id:4,value:"javascript"}, {id:5,value:"asp"}, {id:6,value:"ruby"} ]; 

    $("#txtAllowSearch").autocomplete({ 
     source: function(request, response) { 
      $.ajax({ 
       type: "POST", 
       url: "test_array.aspx", 
       data: "{'prefixText': '" + $('#txtAllowSearch').val() + "'}", 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function(data) { 
        response(data.d); 
       }, 
       failure: function(errMsg) { 
        $('#errMessage').text(errMsg); 
       } 
      }); 
     }, 
     select: function (event, ui) { 
      $("#txtAllowSearch").val(ui.item.value); // display the selected text 
      $("#txtAllowSearchID").val(ui.item.id); // save selected id to hidden input 
     } 
    }); 
}); 

EDIT: Я думаю, что проблема на странице ASPX:

objSQLCommand = New SqlCommand("select id, value from table1 where value like '%@prefixText%'", objSQLConnection) 
objSQLCommand.Parameters.Add("@prefixText", SqlDbType.VarChar, 255).Value = "ing" 

ответ

1

Он смотрит на меня, как этот вопрос может быть функция источника. Когда вы делаете вызов ajax, он выполняется асинхронно. Таким образом, функция запускает вызов ajax и продолжает, что ничего не возвращает для источника.

Я обнаружил это, когда делал загрузочные экраны. Если после вызова ajax закрыть окно загрузки после загрузки, экран загрузки не появится. Мне пришлось переместить его в случае успеха айакс-звонка и ошибок, чтобы заставить его отображаться и исчезать правильно.

Ваш источник должен быть просто ссылка на URL

source: "test_array.aspx", 

От documentation:

Источник данных является сценарий на стороне сервера , который возвращает данные в формате JSON, заданный с помощью с помощью простого URL для опции source.

+0

Если я просто использую e url, как описано выше, как отправить значение на страницу .aspx до того, как страница .aspx вернет данные json? – oshirowanen

+1

Когда используется String, плагин Autocomplete ожидает, что строка укажет на ресурс URL, который будет возвращать данные JSON. Он может находиться на одном и том же хосте или на другом (должен предоставить JSONP). Параметр запроса «term» добавляется к этому URL-адресу. Сами данные могут быть в том же формате, что и локальные данные, описанные выше. - Таким образом, URL-адрес, который он на самом деле вызывает, - 'test_array.aspx? Term = whatevertyped' – Josh

2

Я считаю, что вы должны сделать источник вызова ajax веб-службе, которая в вашем случае кажется методом страницы. Так что если у вас есть функция в вашем коде позади странице выглядеть следующим образом:

public static List<string> GetData(string prefixText){ } 

Вы должны были бы украсить этот метод с [WebMethod] из System.Web.Services пространства имен.

Так было бы, наконец, выглядеть следующим образом:

using System.Web.Services; 

...

[WebMethod()] 
public static List<string> GetData(string prefixText){ } 

HTH

EDIT: Также вам необходимо будет обновить AJAX вызова, чтобы посмотреть, как это для источник:

source: 'test_array.aspx/GetData'