Автозаполнение Jquery из массива в сеансе - PullRequest
0 голосов
/ 21 марта 2011

Я буду хранить массив в сеансе, который будет содержать данные, введенные пользователем (идентификационные номера, используемые для поиска в нескольких различных областях приложения)

Затем я хочу вернуть значения в этом массиве, которыенаходится в сеансе как автозаполнение выбора.

Получение массива в сеансе и его обновление - это простая часть, получить его из сеанса в автозаполнение не так уж и сложно.

Я предпочел бы использовать массив для выполнения автозавершения вместо преобразования в json.

Я пытался использовать '<%= SESSION("MEMBER_SEARCH_ARRAY") %>' в качестве источника для автозаполнения, но без кубиков.

Можно ли сделать что-то вроде:

$.ajax({
     url: "../ajax/MemberAuto.ashx",
     dataType: "text",
     success: function(data) { 
          $('#txtDealerNumber').autoComplete({ source: data }); // <- Object doesn't support this property or method error
     },
          error: function(xhr, status, error) { }
});

, когда MemberAuto.ashx содержит:

Public Class MemberAuto : Implements IHttpHandler, IRequiresSessionState, IReadOnlySessionState

    Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
        context.Response.ContentType = "text/plain"
        context.Response.Write(Join(context.Session("MEMBER_SEARCH_ARRAY"), ","))
        context.Response.End()
    End Sub

    Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
        Get
            Return False
        End Get
    End Property
End Class

к сожалению, я получаю сообщение об ошибке после успешного вызова ajax.

Любой вклад будет принята с благодарностью

Ответы [ 2 ]

0 голосов
/ 21 марта 2011

Предполагая, что вы используете jQueryUI (кажется, что автозаполнение не является частью ядра jQuery), это может быть легко реализовано таким образом. Не нужно ajax, так как autocomplete автоматически делает это.

 $(document).ready(function () {
        $("#txtDealerNumber").autocomplete({
            source: '../ajax/MemberAuto.ashx?AutoComplete'
        }); //function name is autocomplete not autoComplete
 });

где URL ../ajax/MemberAuto.ashx?AutoComplete возвращает (протестируйте в браузере) в формате

["option 1", "option 2", "option 3"]

см. Здесь для более подробной информации. http://jqueryui.com/demos/autocomplete/#option-source

Edit1: Если вы действительно хотите придерживаться своего пути. затем вам нужно преобразовать вашу строку в массив, что можно сделать с помощью eval().

т.

$.ajax({
     url: "../ajax/MemberAuto.ashx",
     dataType: "text",
     success: function(data) { 
          $('#txtDealerNumber').autocomplete({ source: eval(data) }); 
          // data should be in the format ["option1", "option2"]
     },
          error: function(xhr, status, error) { }
});

для тестирования eval http://jsfiddle.net/wZkjZ/

0 голосов
/ 21 марта 2011

Когда я хочу достичь чего-то подобного, я всегда заставляю свой скрипт (в вашем случае memberauto.ashx) печатать javascript.Например, в PHP я использую print('var test = $test');.После этого я использую eval (), чтобы javascript пытался выполнить любой вывод страницы.Затем вы можете использовать ваши новые переменные / функции / JavaScript / все, что вы сделали в вашем Ashx в вашем JavaScript.Кроме того, ошибки легко обнаруживаются при переносе eval () в try-catch.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...