автозаполнение с генерируемым asp.net json - PullRequest
0 голосов
/ 27 января 2011

У меня есть следующий скрипт, который, похоже, не работает. Страница aspx возвращает json, похожий на json в приведенном ниже скрипте, который был закомментирован. Если я вставлю этот 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
        }
    });
});

РЕДАКТИРОВАТЬ: Я думаю, что проблема в aspx странице:

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

Ответы [ 2 ]

2 голосов
/ 27 января 2011

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

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

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

Так что это будет выглядеть, наконец, так:

using System.Web.Services;

...

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

НТН

РЕДАКТИРОВАТЬ: также вам нужно обновить ваш AJAX-вызов, чтобы он выглядел следующим образом:

source: 'test_array.aspx/GetData'
1 голос
/ 27 января 2011

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

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

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

source: "test_array.aspx",

Из документация :

Источником данных является серверный скрипт, который возвращает данные JSON, указанные через простой URL-адрес для опции-источника.

...