Автозаполнение пользовательского интерфейса jQuery не отображает результаты, полученные через AJAX

#asp.net #ajax #json #jquery-ui #jquery-ui-autocomplete

#asp.net #ajax #json #jquery-ui #jquery-ui-autocomplete

Вопрос:

Я пытаюсь использовать функцию автозаполнения пользовательского интерфейса jQuery в своем веб-приложении. Я настроил страницу под названием SearchPreload.aspx. На этой странице проверяется, не вводится ли значение (term) вместе с другим параметром. Страница проверяет входящие значения, а затем извлекает некоторые данные из базы данных и распечатывает массив javascript (например: ["item1","item2"] ) на странице. Код:

 protected void Page_Load(object sender, EventArgs e)
{
    string curVal;
    string type ="";
    if (Request.QueryString["term"] != null)
    {
        curVal = Request.QueryString["term"].ToString();
        curVal = curVal.ToLower();
        if (Request.QueryString["Type"] != null)
            type = Request.QueryString["Type"].ToString();
        SwitchType(type,curVal);
    }
}
public string PreLoadStrings(List<string> PreLoadValues, string curVal)
{
    StringBuilder sb = new StringBuilder();
    if (PreLoadValues.Any())
    {
        sb.Append("["");
        foreach (string str in PreLoadValues)
        {
            if (!string.IsNullOrEmpty(str))
            {
                if (str.ToLower().Contains(curVal))
                    sb.Append(str).Append("","");
            }
        }
        sb.Append(""];");
        Response.Write(sb.ToString());
        return sb.ToString();
    }
}
  

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

Автозаполнение пользовательского интерфейса jQuery записывается следующим образом:

 $(".searchBox").autocomplete({
    source: "SearchPreload.aspx?Type=rbChoice",
    minLength: 1
});
  

Теперь, если я правильно понимаю, каждый раз, когда я набираю в поле поиска, это должно действовать как нажатие клавиши и запускать мой источник, чтобы ограничить данные, правильно? Когда я выполняю инструкцию debug в коде SearchPreload.aspx, кажется, что страница вообще не отображается.

Если я оберну функцию автозаполнения в функцию .keypress, то я попаду на страницу предварительной загрузки поиска, но все равно не получу никаких результатов. Я просто хочу показать результаты в окне поиска точно так же, как пример функциональности по умолчанию на веб-сайте jQuery. Что я делаю не так?

Комментарии:

1. Вы пробовали запускать это в Firefox с firebug? Таким образом, вы можете видеть, какие методы ajax вызываются, а также коды результатов и ответ.

2. к сожалению, мы не можем установить ошибку fire при этой установке…

3. Читая страницу плагина, похоже, что вам нужно вернуть массив json, а не массив javascript. Попробуйте изменить [и] на {и}.

4. Вот как выглядит результат, полученный по URL демонстрационной страницы: jqueryui.com/demos/autocomplete/search.php?term=bla

5. Я обновил свой код, чтобы отобразить страницу в том же формате, что и search.php страница и безрезультатно, она по-прежнему не работает.

Ответ №1:

автозаполнение не отобразит предложения, если JSON, возвращаемый сервером, недействителен. Поэтому скопируйте следующий URL (или возвращенные данные JSON) и вставьте его в JSONLint. Проверьте, действителен ли ваш JSON.

 http://yourwebsite.com/path/to/Searchpreload.aspx?Type=rbChoiceamp;term=Something
  

PS: Я не вижу, что вы вызываете PreLoadStrings функцию. Я надеюсь, что это нормально.

Комментарии:

1. Отличный ресурс, мой JSON был недействительным из-за лишней запятой. Большое спасибо!

Ответ №2:

Нужно проверить пару вещей.

  • Убедитесь, что путь к странице указан правильно. Если вы находитесь в http://mysite.com/subfolder/PageWithAutoComplete.aspx , и ваша страница searchpreload.aspx находится в другом каталоге, таком какhttp://mysite.com/anotherFolder/searchpreload.aspx url, который вы используете в качестве источника, будет неправильным, он должен быть

    источник: «/AnotherFolder/Searchpreload.aspx?Type=rbChoice»

  • Еще одна вещь, которую вы могли бы попробовать, это сделать метод, который вы вызываете, методом страницы на странице searchpreload.aspx. Обычно при работе с javascript я пытаюсь использовать методы страницы для обработки запросов ajax и отправки обратно полученных данных. Больше методов на странице можно найти здесь: http://www.singingeels.com/Articles/Using_Page_Methods_in_ASPNET_AJAX.aspx

HTH.

Комментарии:

1. Я попытался жестко закодировать URL-адрес в исходном коде, и, похоже, он по-прежнему не обеспечивает корректный доступ к странице. Единственный способ заставить это работать — это жестко закодировать значения в массив на javascript, но мне нужно, чтобы это было динамическим на основе отправленного значения и дополнительного параметра.