Автозаполнение пользовательского интерфейса jQuery не отображает результаты, полученные через AJAX - PullRequest
0 голосов
/ 24 мая 2011

Я пытаюсь использовать функцию автозаполнения пользовательского интерфейса jQuery в моем веб-приложении. Я настроил страницу под названием SearchPreload.aspx. Эта страница проверяет значение (термин), чтобы войти вместе с другим параметром. Страница проверяет поступающие значения, а затем извлекает некоторые данные из базы данных и распечатывает на странице массив 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 ui записывается следующим образом:

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

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

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

Ответы [ 2 ]

3 голосов
/ 25 мая 2011

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

http://yourwebsite.com/path/to/Searchpreload.aspx?Type=rbChoice&term=Something

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

0 голосов
/ 24 мая 2011

Несколько вещей для проверки.

  • Убедитесь, что путь к странице правильный. Если вы находитесь по адресу 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

НТН.

...